题目:字符串中的第一个唯一字符
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1 。示例一s = "leetcode" 返回 0.s = "loveleetcode", 返回 2.注意事项:您可以假定该字符串只包含小写字母。
题解思路
1、采用字典映射求解。键为字符串不重复的字母,值为出现的次数,最后寻找第一个字母并返回。
def firstUniqChar(self, s: str) -> int: if s == "".strip(): return -1 result_dict = {} for i in range(len(s)): if s[i] not in result_dict.keys(): result_dict[s[i]] = 1 else: result_dict[s[i]] += 1 print(result_dict) for idx, chr in enumerate(s): if result_dict[chr] == 1: return idx return -1
执行结果
2、采用双指针思想。只要发现存在两个重复的字母,则一定不是,因此可以用如下方法进行,上代码!
def firstUniqChar(self, s: str) -> int: min_unique_char_index = len(s) # 已知字符串由小写字母构成,则遍历a-z for c in "abcdefghijklmnopqrstuvwxyz": i = s.find(c) # 分别从目标的字符串头和字符串尾查找对应字母的索引;如果两索引相等,则说明是单一字符 if i != -1 and i == s.rfind(c): # 更新最新的最小索引 min_unique_char_index = min(min_unique_char_index, i) # 如果返回值不为最后字符的索引,则返回最小索引值 # 否则,根据题意,返回-1 return min_unique_char_index if min_unique_char_index != len(s) else -1
终于等到你,请关注我吧~