解题思路:
从第一位开始遍历,一个pase一组进行对比,对比成功(即出现重复子串),count+1。

遍历至最后一位break,同时计入count数、本命子串位置及长度,方便后续对比输出。
注意事项:

参考代码:

## 字串统计
##给定一个长度为n的字符串S,还有一个数字L,
##统计长度大于等于L的出现次数最多的子串(不同的出现可以相交),
##如果有多个,输出最长的,如果仍然有多个,输出第一次出现最早的
L=int(input())
S=input()
string=[]
## 标志位
flag=1
## 计数
count=0
## 字符出现字数
num=[]
## 存放字符 位置、长度
goal=[]
## 找出需要的字符串序列号
goal_num=[]
## 长度一样的目标
## 最后目标序列号、长度
last_num=0
last_len=0

def founc_one():
    global string,flag,count
    ##for i in range(1):
    ## 暴力法,遇见越界问题直接break 同时标志位标零
    for pase in range(L,len(S)):
        for i in range((len(S))):
            ## 将L个字符预先储存
            for j in range(i,i+pase):
                if j>len(S)-1:
                    flag=0
                    break
                else:
                    string.append(S[j])
            ## 从i开始逐一对比
            for k in range(i,len(S)):
                for m in range(pase):
                    if k+m>len(S)-1:
                        flag=0
                        break
                    else:
                        if S[k+m]!=string[m]:
                            flag=0
                ## L长的字符对比成功
                if flag==1:
                    count+=1
                flag=1
            num.append(count)
            goal.append([i,pase])
            string=[]
            count=0

founc_one()
## 找到出现最多的字符串
for i in range(len(num)):
    if num[i]==max(num):
        goal_num.append(i)

## 找到最长的字符串
last_num=goal[goal_num[0]][0]
last_len=goal[goal_num[0]][1]
for i in range(len(goal_num)):
    if goal[goal_num[i]][1]>last_len:
        last_num=goal[goal_num[i]][0]
        last_len=goal[goal_num[i]][1]

for r in range(last_num,last_num+last_len):
    print(S[r],end="")


点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论