刷题笔记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) , 嗯,是我想多了。