讨论/《画解剑指 Offer》 - 剑指 Offer 50. 第一个只出现一次的字符/
《画解剑指 Offer》 - 剑指 Offer 50. 第一个只出现一次的字符
共 3 个回复

第二个循环不用遍历map,还是继续遍历string中的字符。用遍历到的字符作为map的key,也就无所谓是HashMap还是LinkedHashMap。

1

我的一些想法

class Solution {
    public char firstUniqChar(String s) {
        if(s.length() <= 0) return ' ';
        char result = ' ';
        Map<Character,Integer> map = new LinkedHashMap<>();
       
       for(int i = 0;i < s.length();i++){
           char ch = s.charAt(i);
           if(map.containsKey(ch)){
               map.put(ch,map.get(ch) + 1);
           }else map.put(ch,1);
       }
       for(char key : map.keySet()){
          if(map.get(key) == 1){
              result = key;
              break;
          }
      }
      return result;
    }
}
PS:一定要初始化为LinkedHashMap!!!因为HashMap类型是不按插入顺序存放的,这样就会出错。
比如说:“leetcode”,使用HashMap的话最终结果就不会是“l”而是“c".

goby

class Solution:
    def firstUniqChar(self, s: str) -> str:
        char_map = dict()
        for char in s:
            if char not in char_map:
                char_map[char] = 0

            char_map[char] += 1

        for char in s:
            if char_map[char] == 1:
                return char

        return " "