【面试题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 ' '