import java.util.HashMap;
/**
* 题目:在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,
* 并返回它的位置,如果没有则返回 -1(需要区分大小写)。
* @author hexiaoli
* 思路:剑指offer
* 建立一个哈希表,第一次遍历字符串,统计每个字符的出现次数。第二次遍历字符串,如果该字符出现次数为1,则返回其位置
*/
public class Main {
public static int FirstNotRepeatingChar(String str) {
//字符为key,出现次数为value
HashMap<Character, Integer> map = new HashMap<>();
//边界
if(str == null || str.length() == 0) {
return -1;
}
//字符串长度
int length = str.length();
//第一次遍历字符串,统计每个字符的出现次数
for (int i = 0; i < length; i++) {
if(map.containsKey(str.charAt(i))) {
int value = map.get(str.charAt(i));
//注意是++value或者value+1
map.put(str.charAt(i), ++value);
}else {
map.put(str.charAt(i), 1);
}
}
// 第二次遍历字符串,如果该字符出现次数为1,则返回其位置
for (int i = 0; i < length; i++) {
if(map.get(str.charAt(i))==1) {
// System.out.println(str.charAt(i));
return i;
}
}
//如果都没有,则返回没有出现一次的情况
return -1;
}
public static void main(String[] args) {
// System.out.println(FirstNotRepeatingChar(""));
// System.out.println(FirstNotRepeatingChar(null));
// System.out.println(FirstNotRepeatingChar("abaccdeff"));
System.out.println(FirstNotRepeatingChar("aaccdddff"));
}
}