Leetcode刷题:剑指offer【面试题50 第一个只出现一次的字符】

【面试题50 第一个只出现一次的字符】

在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。

Leetcode题目对应位置: 面试题50:第一个只出现一次的字符

思路:暴力法。遍历整个字符串,对每个字符进行计数(用哈希表),最后再次遍历哈希表,找到值为 1 的字符串键即可。

class Solution:
    def firstUniqChar(self, s: str) -> str:
        if not s: return " "
        n, dic = len(s), {}
        for i in range(n):
            if s[i] not in dic:
                dic[s[i]] = 1
            else: dic[s[i]] += 1
        for i in range(n):
            if dic[s[i]] == 1: return s[i]
        return " "

其实代码可以优化一下,依然使用哈希表,用标志位代表某一字符是否已遇到。当字符已经出现在哈希表中,将标志位置为 False,否则就是 True。第二次遍历哈希表时找到值为 True 的字符键返回即可。

class Solution:
    def firstUniqChar(self, s: str) -> str:
        dic = {}
        for c in s:
            dic[c] = not c in dic
        for c in s:
            if dic[c]: return c
        return ' '

你可能感兴趣的:(今天刷题了吗)