字串统计
- 问题描述
- 输入格式
- 输出格式
- 输入输出样例
- 输入样例1:
- 输出样例1:
- 输入样例2:
- 输出样例2:
- 数据规模和约定
- 提示
- 解题思路
- 条件一
- 条件二
- 条件三
- 代码实现
- 90分——只满足条件3
- 90分——满足条件1和3
- 100分——完美通过测试
问题描述
给定一个长度为n的字符串S,还有一个数字L,统计长度大于等于L的出现次数最多的子串(不同的出现可以相交),如果有多个,输出最长的,如果仍然有多个,输出第一次出现最早的。
输入格式
- 第一行一个数字L。
- 第二行是字符串S。
(L大于0,且不超过S的长度。)
输出格式
一行,题目要求的字符串。
输入输出样例
输入样例1:
4
bbaabbaaaaa
输出样例1:
bbaa
输入样例2:
2
bbaabbaaaaa
输出样例2:
aa
数据规模和约定
- n<=60
- S中所有字符都是小写英文字母。
提示
枚举所有可能的子串,统计出现次数,找出符合条件的那个
解题思路
这题看起来挺简单的,但是如果要拿满分,还有一点点复杂。
给定一个字符串,求它符合条件的子串,,最简单的就是根据字串的长度,把所有子串给取出来,然后把条件套进去找到最符合的子串。
要想让本题拿到满分,就要让子串符合3个条件
条件一
长度大于等于L的出现次数最多的子串(不同的出现可以相交)
条件二
如果有多个,输出最长的
条件三
如果仍然有多个,输出第一次出现最早的
下面来看一下代码实现。
代码实现
90分——只满足条件3
def StringStatistics():
L = int(input())
S = str(input())
Lists = []
for item in range(len(S) - L + 1):
List = S[item : item+L]
Lists.append(List)
# print(Lists)
print(max(Lists, key=Lists.count))
StringStatistics()
这是我一开始写的,想的很简单,但只满足了1个条件,即出现最早的子串
因此,第二次提交时,我考虑了长度大于等于L的出现次数最多的子串
90分——满足条件1和3
def StringStatistics():
L = int(input())
S = str(input())
Lists = []
for iter in range(len(S) - L + 1):
for item in range(len(S) - (L + iter) + 1):
List = S[item : item + L + iter]
Lists.append(List)
# print(Lists)
print(max(Lists, key=Lists.count))
StringStatistics()
这一次,我确实把所有长度大于等于L的字串都找到了,但是,也只拿到了90分
再想想,还差条件2,再次尝试!
当然,除了条件2没有实现,我想到的另一种可能是,最后一个测试点的字符串太长了,导致我调用python内置函数max()时,出现了错误
基于上面的考虑,我对代码做了完善
100分——完美通过测试
def StringStatistics():
L = int(input())
S = str(input())
Lists = []
for iter in range(len(S) - L + 1):
for item in range(len(S) - (L + iter) + 1):
List = S[item : item + L + iter]
Lists.append(List)
# 统计每个字符串出现的次数
result = {}
for item in set(Lists):
result[item] = Lists.count(item)
# 获取出现次数最多的字符串
maxValue = max(result.values())
result = [key for key, value in result.items() if maxValue == value]
# 获取最长的的字符串
maxLenght = 0
for item in result:
Length = len(item)
if Length > maxLenght:
maxLenght = Length
result = [value for value in result if maxLenght == len(value)]
# 获取第一次出现最早的字符串
MinIndex = len(Lists)
for item in result:
Index = Lists.index(item)
if Index < MinIndex:
MinIndex = Index
print(Lists[MinIndex])
StringStatistics()
第三次提交,终于满分了!