问题:给定一个字符串,找出其中出现次数最多的字母?
拓展:如果出现次数一样的字母,按照字母顺序就输出第一个
思路: 利用collections 工具中的Counter,对列表中元素出现的频率进行排序。 Counter返回值是一个按元素出现频率降序排列的Counter对象,它是字典的子类,因此可以使用字典的方法
from collections import Counter
def get_max_char(str):
count = Counter(str)
#以为count现在是一个对象,利用他的属性--count.values()取出其中的值
count_list = list(count.values())
max_value = max(count_list)
max_list = []
for k, v in count.items():
if v == max_value:
max_list.append(k)
# max_list = sorted(max_list) #加这个排序的原因是,如果你找到 两个或两个以上的具有相同的频率的字母, 返回那个先出现在字母表中的字母
# return max_list[0]
return max_list
str1 = 'abcdacdgjkdka'
print(get_max_char(str1))
或者可以使用栈的方法:
具体原理如下:
1.栈空的时候,将元素压入栈
2.如果栈顶元素和下一个元素相等,就进栈
3.其他情况出栈
str1 = '423224444'
s = []
top = -1
for i in range(len(str1)):
if top == -1:
s.append(str1[i])
top += 1
elif str1[i] == s[top]:
s.append(str1[i])
top += 1
else:
s.pop()
top -= 1
print(s[0])
第三种方法厉害了,我发觉个人脑力想出来的哈哈,大家可以参考一下:只需要两个变量的空间复杂度即可搞定。很nice,简单明了!
str1 = '423224444'
can = '' # 可以看做存放元素的变量
count = 0 # 用来判断次数
for i in range(len(str1)):
if count == 0:
can = str1[i]
count += 1
elif str1[i] == can:
count += 1
else:
count -= 1
print(can)
别忘了点个赞,哈哈!!!