华为机试-密码截取

描述

Catcher是MCA国的情报员,他工作时发现敌国会用一些对称的密码进行通信,比如像这些ABBA,ABA,A,123321,但是他们有时会在开始或结束时加入一些无关的字符以防止别国破解。比如进行下列变化 ABBA->12ABBA,ABA->ABAKK,123321->51233214 。因为截获的串太长了,而且存在多种可能的情况(abaaab可看作是aba,或baaab的加密形式),Cathcer的工作量实在是太大了,他只能向电脑高手求助,你能帮Catcher找出最长的有效密码串吗?

数据范围:字符串长度满足 1 \le n \le 2500 \1≤n≤2500

输入描述

请添加图片描述

输入一个字符串(字符串的长度不超过2500)

输出描述

返回有效密码串的最大长度

代码解析

str1 = input()
# count,字符串数量
res_list = []  # res_list:存储匹配的回文字符串长度
for count in range(2, len(str1) + 1):
    # 从回文字符串长度2开始遍历
    j = 0  # j:控制起始索引和结束索引
    while (count + j) <= len(str1):  # 遍历所有count数量的子字符串

        res_1 = str1[j : count + j]  # 当前的子字符串
        res_2 = res_1[::-1]  # 倒置子字符串
        if res_1 == res_2:  # 回文字符串的判断:原字符串等于倒置后的字符串
            res_list.append(count)  # 如果满足条件,把回文字符串的数量添加到res_list列表
            break
        else:
            j += 1  # 索引加1,切片往后移
print(max(res_list))  # 输出res_list中最大的数字

猜你喜欢

转载自blog.csdn.net/summerriver1/article/details/128199395