题目描述
解题步骤
使用哈希表映射26个字母在数组中,此时注意不能使用hashMap,因为要找第一个元素,hashMap映射出的entry并不是有序的。
public char firstUniqChar(String s) {
int[] array = new int[26];
for (int i = 0; i < s.length(); i++) {
array[s.charAt(i) - 'a'] += 1;
}
for (int i = 0; i < s.length(); i++) {
if (array[s.charAt(i) - 'a'] == 1) {
return s.charAt(i);
}
}
return ' ';
}
但使用LinkedHashMap有序的hash集合可以实现。
/**
* 有序的hashMap实现
*
* @param s
* @return
*/
public char firstUniqChar(String s) {
LinkedHashMap<Character, Integer> map = new LinkedHashMap<>();
for (int i = 0; i < s.length(); i++) {
map.put(s.charAt(i), map.getOrDefault(s.charAt(i),0) + 1);
}
for (Map.Entry<Character, Integer> entry : map.entrySet()) {
if (entry.getValue() == 1)
return entry.getKey();
}
return ' ';
}