题目
在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置
分析
最容易想想到的就是从头开始取每一个字符,然后和后面的字符进行比较,加入比较到字符串尾,也没有找到相同的,这个就是第一个出现的字符。
分析这个思想的时间复杂度,n个长度的字符串,每一个字符都有可能和后面的字符相同,所以时间复杂度是O(n2)。
如何遍历一次,而得到所有字符出现的次数呢,就要使用到hashmap,其实就是键值对,我们可以用键存储出现过的字符,出现次数是对应的值。
然后,再遍历一遍,输出第一个值是1对应的键,在字符串中的位置,总共最多需要2n次,时间复杂度是O(n).
代码
import java.util.HashMap;
public class Solution {
public int FirstNotRepeatingChar(String str) {
HashMap< Character, Integer> map= new HashMap<>();
if (str.length() == 0 || str == null) {
return -1;
}
// 利用hashmap,键是字符,值是出现的次数。
for(int i = 0;i < str.length();i++){
if (map.containsKey(str.charAt(i))) {
int valueOfChar = map.get(str.charAt(i));
valueOfChar +=1;
map.put(str.charAt(i), valueOfChar);
}else{
map.put(str.charAt(i), 1);
}
}
// 遍历
for(int j = 0;j < str.length();j++){
if (map.get(str.charAt(j))==1) {
return j;
}
}
return -1;
}
}