题目:在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).
思路:用一个Map保存该字符和出现的次数,最后再对Map遍历第一个value为1的key,然后返回下标。
坑:Map里只有LinkHashMap是按添加的顺序保存的,其他的都是随机【 hashMap/ treeMap】。
代码:
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
public class StringOne {
public static void main(String[] args) {
String str = "google";
StringOne so = new StringOne();
System.out.println(so.FirstNotRepeatingChar(str));
}
public int FirstNotRepeatingChar(String str) {
LinkedHashMap<String, Integer> res = new LinkedHashMap<String, Integer>();
for (int i = 0; i < str.length(); i++) {
if (res.containsKey(String.valueOf(str.charAt(i)))) {
int temp = res.get(String.valueOf(str.charAt(i))) + 1;
res.put(String.valueOf(str.charAt(i)), temp);
} else {
res.put(String.valueOf(str.charAt(i)), 1);
}
}
Iterator<Entry<String, Integer>> iter = res.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry<String, Integer> entry = (Map.Entry<String, Integer>) iter.next();
if (entry.getValue() == 1) {
return str.indexOf(entry.getKey());
}
}
return -1;
}
}