剑指 Offer 50. 第一个只出现一次的字符
题目链接:https://leetcode.cn/problems/di-yi-ge-zhi-chu-xian-yi-ci-de-zi-fu-lcof/
个人题解记录
1.哈希表
记录索引,代码可以优化,不使用50000标记,而是利用map自带的api判断是否包含这个key,如果不包含添加索引,包含将索引修改为-1.
另一种做法是记录频数,第二次遍历判断频数即可
class Solution {
public char firstUniqChar(String s) {
if (s.length()==0) return ' ';
HashMap<Character,Integer> map = new HashMap<>();
for (int i = 0;i<s.length();i++){
int val = map.getOrDefault(s.charAt(i),-1);
if (val == -1) {
map.put(s.charAt(i),i); //存入当前位置
}else {
//如果已经有了,证明不是第一次出现
map.put(s.charAt(i),50000);
}
}
int min = Integer.MAX_VALUE;
for (int i : map.values()){
min = Math.min(min,i);
}
if (min == 50000) return ' ';
return s.charAt(min);
}
}