字串统计
问题描述
给定一个长度为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分)