风之谷音乐学院

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函数提起优先选择列表存储数据;对应关系(如子串与出现次数)等用列表或字典(值可重复键不可重复特点)存储

赞赞呗谢谢啦

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值