题目描述:
在字符串 s 中找出第一个只出现一次的字符。如果没有,返回一个单空格。 s 只包含小写字母。
例子:
s = "abaccdeff"
返回 "b"
s = ""
返回 " "
方法一 - -暴力法
直接for循环里,通过count()函数逐个检查是否有元素的个数等于1,有则返回该元素,如果遍历完没有,则返回空
class Solution(object):
def firstUniqChar(self, s):
"""
:type s: str
:rtype: str
"""
for i in range(len(s)):
if s.count(s[i])==1:
return s[i]
return ' '

可是这效率确实看不下去,因此采用方法2
方法2–哈希表法
1、遍历字符串 s ,使用哈希表统计 “各字符数量是否 > 1>1 ”。
2、再遍历字符串 s ,在哈希表中找到首个 “数量为 11 的字符”,并返回。
初始化: 字典 (Python)、HashMap(Java)、map(C++),记为 dic ;
字符统计: 遍历字符串 s 中的每个字符 c ;
若 dic 中 不包含 键(key) c :则向 dic 中添加键值对 (c, True) ,代表字符 c 的数量为 1 ;
若 dic 中 包含 键(key) c :则修改键 c 的键值对为 (c, False) ,代表字符 c 的数量 >1 。
查找数量为 1 的字符: 遍历字符串 s 中的每个字符 c ;
若 dic中键 c 对应的值为 True :,则返回 c 。
返回 ’ ’ ,代表字符串无数量为 1 的字符。
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 ' '
本文介绍两种方法来找出字符串中首次出现的唯一字符:暴力法和哈希表法,并提供了Python实现代码。
&spm=1001.2101.3001.5002&articleId=108987463&d=1&t=3&u=e208993c3ed543a8b993df9184e526c3)
460

被折叠的 条评论
为什么被折叠?



