题目描述:
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1.
思路:
第一种:扫描字符串,将每个字符与其它所有字符进行比较,如果没有相同,说明他就是第一个只出现一次的字符。算法时间复杂为
O(n2)
O
(
n
2
)
第二种:采用hash表,一次扫描字符串记录字符出现的次数数,第二次扫描字符串,在hash表找到第一个次数为1的字符,时间复杂度为 O(n) O ( n ) ,空间复杂度也为 O(n) O ( n )
class Solution:
def FirstNotRepeatingChar(self, s):
# write code here
charcount = dict()
slen = len(s)
for ch in s:
charcount[ch] = charcount.get(ch, 0) + 1
# 注意这里不能直接遍历字典找value为1的key,因此字典是无序的
for i in range(slen):
if charcount.get(s[i]) == 1:
return i
return -1
# python特别版
def FirstNotRepeatingChar(self, s):
return s.index(list(filter(lambda c:s.count(c)==1,s))[0]) if s else -1
'''
语法
filter(function, iterable)
参数
function -- 判断函数。
iterable -- 可迭代对象。
'''