1.题目
2.解法
思路:通过遍历整个字符数组,统计每个字符出现的次数,那么就设定char - count的键值对,这里是字母组合,根据ASCII码知道,可以预设一个包含一个128字符的数组。
public class Solution {
public static int FirstNotRepeatingChar(String str){
if(str == null || str.length() == 0) return -1;
char[] chArr = str.toCharArray();
int[] countArr = new int[128];
for (int i = 0; i < chArr.length; i++) {
++countArr[chArr[i]];
}
for (int i = 0; i < chArr.length; i++) {
if(countArr[chArr[i]] == 1){
return i;
}
}
return -1;
}
}
使用空间换时间的做法
如果字符串里面包含汉字,那我会使用hashmap方法,存储char - count键值对。
public class Solution {
public static int FirstNotRepeatingChar(String str){
if(str == null || str.length() == 0) return -1;
char[] chArr = str.toCharArray();
Map<Character, Integer> map = new HashMap<>();
for (int i = 0; i < chArr.length; i++) {
if(!map.containsKey(chArr[i])){
map.put(chArr[i], 1);
}else{
map.replace(chArr[i], map.get(chArr[i])+1);
}
}
for (int i = 0; i < chArr.length; i++) {
if(map.get(chArr[i]) == 1){
return i;
}
}
return -1;
}
}
但是HashMap的时间效率很低