Hiccup
发布于 2025-11-07 / 8 阅读
0
0

刷题笔记Day3-20251106

刷题笔记Day3

: 前两天未做笔记,今日开始笔记形式归纳总结

找出字符串中第一个只出现一次的字符

知识点 字符串

描述

对于给定的字符串,找出第一个只出现一次的字符。如果不存在,则输出 −1−1。

输入描述:

在一行上输入一个长度为 1≦len(s)≦1031≦len(s)≦103、仅由小写字母构成的字符串 ss

输出描述:

如果存在只出现一次的字符,输出第一个满足条件的字符;否则,直接输出 −1−1。

示例1

输入:

asdfasdfo

输出:

o

示例2

输入:

aabbcc

输出:

-1

我的答案:

import java.util.Scanner;
​
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        String output = "-1";
        for (int i = 0; i < str.length(); i++) {
            int lastIndex = str.lastIndexOf(str.charAt(i));
            int firstIndex = str.indexOf(str.charAt(i));
            if (firstIndex == lastIndex) {
                output = String.valueOf(str.charAt(i));
                break;
            }
        }
        System.out.print(output);
    }
}

思路:

一开始想到的是用Map,先For循环遍历,以字母为key,value为对应出现的次数。然后再For循环遍历,判断Value等于1的,找到则直接返回。(这里需要注意,得使用顺序不变的LinkedHashMap)

做完之后,想了想有没有可能借助正则匹配筛选出,这样就是时间复杂度 O(1) , 嗯,是我想多了。



评论