原题链接:蓝桥杯算法训练VIP-字串统计
解题思路:
从第一位开始遍历,一个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分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复