白羽啊


私信TA

用户名:723822380

访问量:3188

签 名:

等  级
排  名 4468
经  验 1691
参赛次数 0
文章发表 22
年  龄 0
在职情况 学生
学  校 泉师
专  业

  自我简介:

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


注意事项:

参考代码:

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 人评分

  评论区

  • «
  • »