密码截取(20200306)

本文介绍了一种算法,用于从给定的字符串中找出最长的有效对称密码子串。通过对每个子字符串进行对称性检查,算法能够识别并返回最长的有效密码串的长度。

题目描述

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

输入描述:
输入一个字符串
输出描述:
返回有效密码串的最大长度

示例1
输入
ABBA
输出
4

题解:

思路:本题的思路应该挺多的,本King的思路是,从第一个元素开始依次往后,判断每个子字符串是否是对称的,若是对称的,就把该子字符串的长度存进数组中,然后找出数组中最大的值,即是最长的有效密码

# coding=utf-8

def isDuiChen(s):
    l = 0
    r = len(s)-1
    while l <= r:
        if s[l] == s[r]:
            l += 1
            r -= 1
            continue
        else:
            return False
    return True

if __name__ == '__main__':
    s = input()
    l = 0
    r = len(s)-1
    res = []
    while l <= r:
    	#p元素用作标记目前判断的子字符串的起始位置
        p = l
        while s[l] != s[r] and l < r:
            r -= 1
        else:
            ss = s[l:r+1]
            if isDuiChen(ss):
                res.append(r - l + 1)
            l = p + 1
            r = len(s)-1
    res.sort(reverse=True)
    print(res[0])

说明:
目前本King的代码能力只能按上述方式实现,后续有更好的方案,欢迎各位指点,也会不定期做修改~

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值