python出现一次的字符_python3实现在一个字符串中找到第一个只出现一次的字符...

这道题是剑指offer中的35题,也是一道经典的面试题。

str = "ssssaaaccddsadasf"

使用两层for循环遍历,直到遇到只出现一次的字符返回该字符

def methond1(str):

len_str = len(str)

for i in range(len_str):

count = 0

for j in range(len_str):

if str[j] == str[i]:

count += 1

if count == 1:

return str[i]

使用一层for循环,统计某字符出现的所有次数,并按其出现的先后顺序记录在列表中

def methond2(str):

counts = {}

order = []

for s in str:

if s in counts:

counts[s] +=1

else:

counts[s] = 1

order.append(s)

for i in order:

if counts[i] == 1:

return i

同一种方法的另外一种写法

def FirstNotRepeatingChar(self, s):

dict = {}

for ele in s:

dict[ele] = 1 if ele not in dict else dict[ele] + 1

for i in range(len(s)):

if dict[s[i]] == 1:

return i

return -1

使用内置的count 函数

def methond3(str):

for s in str:

if str.count(s) == 1:

return s,str.index(s)

如果将这个问题进行扩展,可扩展为:在一个字符串中找到第一个只出现N次的字符,假设N=2

只需将上方的代码做稍微的改动即可

def methond1_n(str):

len_str = len(str)

for i in range(len_str):

count = 0

for j in range(len_str):

if str[j] == str[i]:

count += 1

if count == 2:

return str[i]

def methond2_n(str):

counts = {}

order = []

for s in str:

if s in counts:

counts[s] +=1

else:

counts[s] = 1

order.append(s)

for i in order:

if counts[i] == 2:

return i

def methond3_n(str):

for s in str:

if str.count(s) == 2:

return s

若将其做进一步的扩展:在一个字符串中找到第M个只出现N次的字符,假设M=3 N=2

def methond1_mn(str):

for i in range(len(str)):

count = 0

m = 0

for j in range(len(str)):

if str[i] == str[j]:

count += 1

if count == 2:

if m == 2:

return str[i]

else:

m+=1

你可能感兴趣的:(python出现一次的字符)