在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).
最开始有两个思路:
1.类似之前做过的统计字符串中出现超过一半的数字,从同一个字符开始,利用双循环,每次从头到尾比对,一旦发现超过两次,立马跳出内循环,并更改参照字符。直到内循环结束,找出只出现一次的位置。思路简单,但代码过于繁琐。
2.后想到将字符都变成ASCII值,将每个字符放入一个集合中,只要出现相同的,就把这个扔出来,最后集合中只留下一次的字符。但是后来发现有一个方法(就是第3个)类似,转换ASCII值有点多余,目前只提供思路,如果有小伙伴有什么想法,欢迎留言。
3.用一个字典统计每个字符出现的次数(将字符的位置作为索引),遍历字典,找出出现一次的字符位置。
代码:
def FirstNotRepeatingChar(self, s):
# write code here
if s=='': #排除字符串为空的情况
return -1
dict_str={}#建立字典
size=len(s)
for i in range(size):
if s[i] in dict_str:#字符重复,字典中该字符次数加1
dict_str[s[i]]+=1
else:
dict_str[s[i]]=1
for i in range(size):#找出只有一次的字符
if dict_str[s[i]]==1:
return i
return -1#全部重复就返回-1
另附上常见处理字符串的一些方法:
https://blog.csdn.net/u014303046/article/details/82526166