s = input()
n = int(input())
slst = []
while n > 0:
s_ = input()
slst.append(s_)
n -= 1
count = []#记次数
# word=[]
word = {}
for i in slst:
c = 0
for j in range(len(s)):
if i[0] == s[j] and i == s[j:(j + len(i))]:
c += 1
word[i] = c#次数与子串的一一对应字典,实际就是记录每一个子串(与次数关联)
count.append(c)
print(max(count))
"""for i in range(len(word)-1, -1):
if word[i] >= 0:
print(word[i])
break"""
# print(word)
# 读题:按字典顺序从小到大输出所有次数相同且最多的字符---》有重复次数的,所以次数变量不能做为键
values = []#求最大次数不直接max(字典),因为max函数对列表更友好
for value in word.values():
values.append(value)
max_ = max(values)
result = [key for key, value in word.items() if value == max_] #筛选若字典值为最大数值的键值(唯一)
result_ = sorted(result)#排序函数也是对列表更友好
for i in result_:
print(i)
思路:
大体:遍历主串的每一个字符,从中查找是否主串的一小段等于子串即嵌套循环可解决(筛选条件为i[0] == s[j] and i == s[j:(j + len(i))]即首字母相同并截取判断),截取很重要!
突破点: 输出最大次数对应的子串,但有多个最大次数的子串即次数相同,那么怎么通过最大次数来输出这些子串呢----》数组不好记录,用字典(子串做字典键,次数做字典值)。而且题目也说了按字典顺序从小到大输出所有次数相同且最多的字符
技巧:
涉及到sorted排序函数,max函数提起优先选择列表存储数据;对应关系(如子串与出现次数)等用列表或字典(值可重复键不可重复特点)存储
赞赞呗谢谢啦