Python 实现找出一个字符串中出现次数最多的字符并输出该字符

问题:给定一个字符串,找出其中出现次数最多的字母?
拓展:如果出现次数一样的字母,按照字母顺序就输出第一个
思路: 利用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)

别忘了点个赞,哈哈!!!

猜你喜欢

转载自blog.csdn.net/qq_42166308/article/details/103936429