解题思路:暴力,但不完全暴力


注意事项:

参考代码:

string = input().strip()
length = len(string)
max_len = float("-inf")
# 参考了另一位笔者的代码,他没有写注释,虽然程序很简短,但细节还是需要思考的,本人只略做修改和注释,方便理解
for i in range(1, length + 1):  # 遍历子串的长度
    for j in range(length - i + 1):  # 遍历起始位置
        if string.find(string[j:j + i], j + 1) != -1 and len(string[j:j + i]) > max_len:
            # 当前起始位置能取到的字符串(出现了一次)能否在起始位置+1之后的部分找到相同的,即出现两次及以上,且长度大于当前最大长度
            max_len = len(string[j:j + i])
        else:  # 此处break思路非常巧妙,代码实际上只求解了每个位置能出现两次的字符串的最大长度,而不是遍历所有的子串,所以平均时间复杂度是要远远优于O(n**2)
            break
print(max_len)


点赞(0)
 

0.0分

0 人评分

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

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

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

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

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

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

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

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

评论列表 共有 0 条评论

暂无评论