蓝桥杯算法训练字串统计-python题解

字串统计

问题描述
  给定一个长度为n的字符串S,还有一个数字L,统计长度大于等于L的出现次数最多的子串(不同的出现可以相交),如果有多个,输出最长的,如果仍然有多个,输出第一次出现最早的。
输入格式
  第一行一个数字L。
  第二行是字符串S。
  L大于0,且不超过S的长度。
输出格式
  一行,题目要求的字符串。

输入样例1:
  4
  bbaabbaaaaa

输出样例1:
  bbaa

输入样例2:
  2
  bbaabbaaaaa

输出样例2:
  aa
数据规模和约定
  n<=60
  S中所有字符都是小写英文字母。
提示
  枚举所有可能的子串,统计出现次数,找出符合条件的那个

n=int(input())
s=input()
res=[]
ans=[]
m=len(s)

for j in range(n,m+1):
    for i in range(m-j+1):
        res.append(s[i:i+j])

for i in res:
    if i not in ans:
        ans.append(i)

a=['0']
b=0
for x in ans:
    num=res.count(x)
    if num>b:
        b=num
        a.pop()
        a.append(x)

for i in a:
    print(i)

(90分)


 while True:
    try:
        n = int(input())
        a = input()
        temp_val = []
        temp_num = []
        s = []
        result = {}
        result1 = {}
        for j in range(n, len(a) + 1):  # 切片长度
            for i in range(len(a) - j + 1):
                temp_val.append(a[i:i + j])  # temp_val是存储所有的可能出现的子串,含重复的

        for x in temp_val:
            if x not in s:
                s.append(x)  # 给切片去重

        for i in s:
            result.update({i: temp_val.count(i)})  # 把次数都数一下
        for key, value in result.items():
            if value == max(result.values()):  # 把出现最多的都挑出来,可能不止一个
                result1.update({key: value})
        for key, value in result1.items():
            temp_num.append(len(key))
        print(list(result1)[temp_num.index(max(temp_num))])  # 对字典取list就是这个字典的键构成的列表,输出最长的
    except:
        break

(100)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值