本题题目描述:
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区
分大小写).
分析:需要查找出第一次只出现过一次的字符,扩大说,也就是要统计字符和个数的关系,两者一一对应的关系,这种关系想到了一个容器:Map
第一次遍历,记录每个字符的出现次数。
第二次遍历,从头到尾,查看哪个字符出现一次,如果查找出来了,则说明该数为第一次出现的次数。
时间复杂度:
O
(
N
2
)
O(N^2)
O(N2)
空间复杂度:
O
(
N
)
O(N)
O(N)
基于以上,写出如下代码:
import java.util.*;
public class Solution {
public int FirstNotRepeatingChar(String str) {
int length = str.length();
int result = -1;
if(str == null || length == 0){
return result;
}
Map<Character,Integer> temp = new HashMap<>();
// 统计每个字符出现的次数
for(int i = 0; i < str.length();i++){
if(temp.containsKey(str.charAt(i))){
temp.put(str.charAt(i),temp.get(str.charAt(i)) + 1);
}else{
temp.put(str.charAt(i),1);
}
}
for(int i = 0; i < length; i++){
if(temp.get(str.charAt(i)) == 1){
result = i ;
break;
}
}
return result;
}
}
思考:如果想要判断多个字符是不是在某个字符串中出现过或者说统计一个字符串中的字符在某个字符串中出现的次数,都可以利用HashMap
来处理。