算法学习之 Python 实现单词分析-找出现次数最多的字母的 n 中方式

Posted OceanSec

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法学习之 Python 实现单词分析-找出现次数最多的字母的 n 中方式相关的知识,希望对你有一定的参考价值。

差点忘了我可是要打蓝桥杯的人,快临阵磨枪一下

单词分析-找出现次数最多的字母

题目描述

小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组 成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得最多来分辨单词。

现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这个字母出现的次数。

输入描述

输入一行包含一个单词,单词只由小写英文字母组成。

对于所有的评测用例,输入的单词长度不超过 1000。

输出描述

输出两行,第一行包含一个英文字母,表示单词中出现得最多的字母是哪个。如果有多个字母出现的次数相等,输出字典序最小的那个

第二行包含一个整数,表示出现得最多的那个字母在单词中出现的次数

代码分析

方法一

# 输入单词
word=input()
maxNumChar=0
list=[]

# 找到出现得最多的那个字母在单词中出现的次数
for i in word:
  a=word.count(i)
  if a>maxNumChar:
    maxNumChar=a

# 根据上次找到的字母的数量找字母
for j in word:
  if word.count(j)==maxNumChar:
    list.append(j)
    
# 如果出现次数一致按字典顺序排序
list.sort
print(list[0])    
print(maxNumChar)

该方法适用于单词中大小写混用的情况

方法二

a = input()
b = [0]*256
for i in a:
  b[ord(i)]=b[ord(i)]+1
print(chr(b.index(max(b))))
print((max(b)))

摘自蓝桥杯官网单词分析-LOU4031234002 的代码,一开始看有点懵,就是用字母对应 ASCII 十进制数字作为下标的列表存储对应的出现次数

方法三

其中还可以把方法一中的找出现得最多的那个字母在单词中出现的次数用以下代码代替

def max_num(n):
  c = max(n, key=n.count)
  return n.count(c)
# key 可以对要比较的对象进行一些处理,以达到对对象进行特定规则的比较

这里有一个问题可以思考,这里的 c 不就是出现次数最多的字母么,能不能直接输出呢,答案是可以而且更简单代码就是下面的方法 1,题目给出了条件如果有多个字母出现的次数相等,输出字典序最小的那个,且输入单词只有小写字母,为什莫只有小写字母很重要,看完以下代码比较你就知道了

a = "aaaaaaBBBBBB"

# 方法1
maxnum=max(a, key=a.count)
maxcount=a.count(maxnum)
print("%c\\n%d" %(maxnum,maxcount))

# 方法2
b = [0]*256
for i in a:
  b[ord(i)]=b[ord(i)]+1
print(chr(b.index(max(b))))
print((max(b)))

# 方法3
s=a
m=sorted(sorted(s),key=lambda x:s.count(x),reverse=True)[0]
print(m,s.count(m),sep='\\n')

输出如下

在方法 2 和 3 中因为 B 的 ASCII 值为 66 而 a 的 ASCII 值为 97,从前向后找先找到的是 B,所以这两种方法适用于单词只有大写或小写的情况

之所以方法 1 可以正确输出只是因为它取的是出现次数最多的字母的第一个,如果 a=“BBBBaaaa”,输出结果依然是 B

总结

所有方法均可完成题目,但以上几种方法只有第一种适合于大小写混合情况

更多关于 max 函数的用法

获取字典中key的最大值
dict1 = 'a': '11', 'c': '22', 'b': '33'
print(max(dict1))
print(max(dict1.keys()))

获取字典中最大value对应的key值
dict1 = 'a': '11', 'c': '22', 'b': '33'
print(max(dict1, key=dict1.get))
print(max(dict1, key=lambda x: dict1[x]))

获取字典中最大value的值
dict1 = 'a': '11', 'c': '22', 'b': '33'
print(max(dict1.values()))

获取句子中的最长单词
str3 = "Life is short , I use python"
print(str3.split())
print(max(str3.split(), key=len))

获取list中的最大值
list1 = ['11', 'zzz', '22', 'eee']
print(max(list1))

获取list中的最大数值
list2 = ['11', '3', '222', '67']
print(max(list2, key=lambda x: int(x)))

获取list中的绝对值最大的值
list3 = ['11', '-399', '222', '67']
print(max(list2, key=lambda x: abs(int(x))))

获取元组list中指定索引的最大值
list4 = [(1, 'a'), (3, 'c'), (4, 'e'), (-1, 'z')]
print(max(list4, key=lambda x: x[1]))

# 摘自:https://blog.csdn.net/u013250071/article/details/118220139

以上是关于算法学习之 Python 实现单词分析-找出现次数最多的字母的 n 中方式的主要内容,如果未能解决你的问题,请参考以下文章

机器学习之单词拼写检查

机器学习之学习路线

算法学习之选择排序

算法学习之选择排序

Elasticsearch学习之相关度评分TF&IDF

python学习之实现5种排序算法