思路一:
由于字符只出现一次,所以 该字符 第一次出现的位置 和 他最后出现的一次位置 是相同的,遍历字符串,如果第一次出现的位置等于 最后一次出现的位置,返回下标:
public class Solution {
public int FirstNotRepeatingChar(String str) {
char[] splitChat = str.toCharArray();
for (int i = 0; i < splitChat.length; i++) {
if (str.indexOf(splitChat[i]) == str.lastIndexOf(splitChat[i])) {
return i;
}
}
return -1;
}
}
总结: 字符判断 用 == 因为是 八大类型;
思路二:
根据hashMap的特性,只允许出现一次 key, key不能相同,如果包含map.containsKey(str.charAt(i)) , value的值加一,根据这个特性,统计出单个字符串出现的次数,然后 遍历 map的value的值,如果等于 1,说明第一次出现一次,直接返回;
import java.util.HashMap;
public class Solution {
public int FirstNotRepeatingChar(String str) {
HashMap<Character, Integer> map = new HashMap<>();
for (int i = 0; i < str.length(); i++) {
if (map.containsKey(str.charAt(i))) { // 如果有 key 就 value加一,没有的话,放进去
int time = map.get(str.charAt(i)); // 获取value
map.put(str.charAt(i), ++time);
} else {
map.put(str.charAt(i), 1);
}
}
for (int i = 0; i < str.length(); i++) {
if (map.get(str.charAt(i)) == 1) {
return i;
}
}
return -1;
}
}
使用hashMap统计 string 里面 字符出现的次数
public HashMap countChar(String str){
HashMap<Character, Integer> map = new HashMap<>();
for (int i = 0; i < str.length(); i++) {
if (map.containsKey(str.charAt(i))) { // 如果有 key 就 value加一,没有的话,放进去
int time = map.get(str.charAt(i)); // 获取value
map.put(str.charAt(i), ++time);
} else {
map.put(str.charAt(i), 1);
}
}
return map;
}
// 解释: map里面的 key 代表字符,value 代表出现的次数