解题思路:
从第一位开始遍历,一个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分
2 人评分
C语言程序设计教程(第三版)课后习题6.10 (C语言代码)浏览:1051 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:780 |
C语言程序设计教程(第三版)课后习题5.6 (C语言代码)浏览:901 |
核桃的数量 (C语言代码)浏览:870 |
C语言程序设计教程(第三版)课后习题9.3 (C语言代码)浏览:593 |
永远的丰碑 (C语言代码)浏览:516 |
输入输出格式练习 (C语言代码)浏览:842 |
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:479 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:680 |
【计算两点间的距离】 (C语言代码)浏览:844 |