剑指offer 50 - 字符流中第一个不重复的字符 - python

236 阅读1分钟

题目描述:

请实现一个函数用来找出字符流中第一个只出现一次的字符。

示例:

s = "abaccdeff"
返回 "b"

s = "" 
返回 " "

限制 :0 <= s 的长度 <= 50000


这道题和剑指offer -第一个只出现一次的字符位置 - python是基本一样的,前者是返回第一个只出现一次的字符,后者是返回第一次只出现一次的字符的位置。使用Counter()得到字符串中字符和它出现次数的对应关系,遍历字典返回第一个值为1的键,否则返回" "

class Solution:
    def firstUniqChar(self, s: str) -> str:
        if s == "": return " "
        
        l = Counter(list(s))

        for k, v in l.items():
            if v == 1:
                return k
        
        return " "

当然也可以自己逐个统计后遍历找到第一个出现次数为1的字符,如下所示:

class Solution {
    public char firstUniqChar(String s) {
        Map<Character, Integer> map = new LinkedHashMap<>();

        char[] chars = s.toCharArray();
        for (char c : chars) {
            if(!map.containsKey(c)){
                map.put(c, 1);
            }else{
                Integer value = map.get(c);
                map.put(c, value + 1);
            }
        }

        Set<Character> characters = map.keySet();
        for (Character character : characters) {
            if(map.get(character) == 1){
                return character;
            }
        }

        return ' ';
    }
}

这里使用了Java中的Map,Python中使用dict是同样的逻辑。