题解 | #最长回文子串#
最长回文子串
http://www.nowcoder.com/practice/12e081cd10ee4794a2bd70c7d68f5507
补充题目描述
Catcher 是MCA国的情报员,他工作时发现敌国会用一些对称的密码进行通信,比如像这些ABBA,ABA,A,123321,但是他们有时会在开始或结束时加入一些无关的字符以防止别国破解。比如进行下列变化 ABBA->12ABBA,ABA->ABAKK,123321->51233214 。因为截获的串太长了,而且存在多种可能的情况(abaaab可看作是aba,或baaab的加密形式),Cathcer的工作量实在是太大了,他只能向电脑高手求助,你能帮Catcher找出最长的有效密码串吗?
(注意:记得加上while处理多个测试用例)
输入描述:
输入一个字符串
输出描述:
返回有效密码串的最大长度
方法1:python
本人写的代码,有一个测试用例无法通过。
while True: try: a = input() b = a.split() b = "".join(b) alist = list(b) maxhui = 0 for start in range(len(a)): for end in range(start + 1, len(a)): aL = alist[start:end + 1] aR = alist[start:end + 1] aR.reverse() outList = aL + aR outstr = ''.join(outList) if outstr in a: if len(outstr) > maxhui: maxhui = len(outstr) print(maxhui) except: break
方法2: 高手解法。搬砖
n = input() c_m = 0 for i in range(0, len(n) - 1): c = 0 j = i - 1 m = i + 1 if n[i] == n[m]: j = i elif n[i] == n[j]: m = i else: c = 1 while (j > 0) and (m < len(n)): if n[j] == n[m]: c += 2 else: break j -= 1 m += 1 if c > c_m: c_m = c print(c_m)