在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。
示例:
s = "abaccdeff"
返回 "b"
s = ""
返回 " "
限制:
0 <= s 的长度 <= 50000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/di-yi-ge-zhi-chu-xian-yi-ci-de-zi-fu-lcof
思路,用tmp判断字符是否出现过,如果有第二次出现就把原字符串中的该字符全部删了,留下的为只出现过一次的字符,返回第一个值。
class Solution:
def firstUniqChar(self, s: str) -> str:
tmp = ''
strs = s
for ss in s:
if ss not in tmp:
tmp+=ss
else:
strs = strs.replace(ss,'')
if strs:
return strs[0]
else:
return ' '
用hash表判断是否重复,hash表查找起来比较快,提高效率
代码来源:作者:jyd 链接:https://leetcode-cn.com/problems/di-yi-ge-zhi-chu-xian-yi-ci-de-zi-fu-lcof/solution/mian-shi-ti-50-di-yi-ge-zhi-chu-xian-yi-ci-de-zi-3/
class Solution:
def firstUniqChar(self, s: str) -> str:
dic = {}
for c in s:
dic[c] = not c in dic #键存字符,值:重复出现的存成false,不重复出现的存成true
for c in s:
if dic[c]: return c #遍历hash表,返回第一个值为true的字符
return ' '
有序hash表,第二轮循环遍历排序后的hash表,以比较快的找到第一个不重复的值,python3.6默认用排序后的字典
代码来源:作者:jyd 链接:https://leetcode-cn.com/problems/di-yi-ge-zhi-chu-xian-yi-ci-de-zi-fu-lcof/solution/mian-shi-ti-50-di-yi-ge-zhi-chu-xian-yi-ci-de-zi-3/
class Solution:
def firstUniqChar(self, s: str) -> str:
dic = {}
for c in s:
dic[c] = not c in dic
for k, v in dic.items():
if v: return k
return ' '