问题
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).
思考
- 使用HashMap先计算出来每个字符出现的次数
- 取出hashMap中字符出现一次并首次出现的位置
代码
//利用HashMap
//效率比较低
//空间复杂度:O(n)
//时间复杂度:O(n)
public int FirstNotRepeatingChar1(String str){
if(str.equals("")){
return -1;
}
HashMap<String,Integer> map = new HashMap<>();
String[] strs = str.split("");
//遍历字符数组;计算每个字符出现的次数存储到hashMap中
for(String s:strs) {
if (map.containsKey(s)) {
map.put(s, map.get(s) + 1);
} else {
map.put(s, 1);
}
}
//再次遍历字符串得到第一次出现字符的位置
for(int i=0;i<strs.length;i++){
if(map.get(strs[i])==1){
return i;
}
}
return -1;
}