题目
代码
import os
import sys
# 请在此输入您的代码
z = input()
z = z.lower()
n = int(input())
m = []
d = {}
l = []
for i in range(n):
m.append(input().lower())
for i in m:
count =0
k = len(i)
for j in range(len(z)):
if i[0] == z[j] and i == z[j:j+k]:
count += 1
d[count]={i}
l.append(count)
print(max(l))
v = str(d[max(l)])
print(v[2:-2])
问题:
改进
- 字典
d
中的值应该是一个列表,而不是一个集合。因为可能存在多个单词出现次数相同的情况,需要将它们都加入到列表中。 - 字典
d
中的键值对应该是累加,而不是覆盖。因为可能存在多个单词出现次数相同的情况,需要将它们都加入到同一个键对应的列表中。 - 当存在多个单词出现次数相同的情况时,输出的结果应该是按照字典序排序后的第一个单词,而不是一个列表。
以下是修改后的代码:
python复制代码
z = input()
z = z.lower()
n = int(input())
m = [] d = {}
l = []
for i in range(n):
m.append(input().lower()
for i in m: count = 0
k = len(i)
for j in range(len(z)):
if i[0] == z[j] and i == z[j:j+k]:
count += 1
if count in d:
d[count].append(i)
else:
d[count] = [i]
l.append(count)
max_count = max(l)
result = sorted(d[max_count])
print(max_count)\
print(result)
修改后的代码中,字典 d
中的值是一个列表,使用 append
方法将单词加入到列表中;字典 d
中的键值对使用累加的方式,如果键已经存在,则将单词加入到对应的列表中;最后,将字典 d
中键值为最大值的列表排序后,输出列表中的第一个单词。
# 请在此输入您的代码
z = input().lower()
n = int(input())
# 内容
m = []
# count
d = []
#zzzz
v = []
for i in range(n):
m.append(input().lower())
for i in m:
count = 0
k = len(i)
for j in range(len(z)):
if i[0] == z[j] and i == z[j:j + k]:
count += 1
d.append(count)
print(max(d))
for i in range(n):
if d[i] == max(d):
v.append(m[i])
v.sort()
for i in range(len(v)):
if i > 0:
if v[i] != v[i-1]:
print(v[i])
else:
print(v[i])
改进2:
对结果进行筛选,把出现次数最大的片段提取粗来,并进行排序,用一个list进行接收,并用list的方法sort()进行从小到大的排序,然后再进行筛选,把重复的片段除去,因为之前已经进行了排序,所以只需要判断相邻的是不是相同的就可以
最后进行输出