【发布时间】:2021-10-12 22:41:02
【问题描述】:
我正在尝试检查一个字符串是否包含任何长度 > 1 的子字符串,这是一个回文。 (请注意,这与检查整个字符串是否为回文是不同的。)我能够编写一个查找偶数或奇数回文子串的函数。我已经尽我所能对其进行了优化,但是我的代码超出了一些测试用例的时间限制。
如何改进算法以使其更快?
def findPalindrome(s):
ans = ""
for i in range(len(s)):
for k in range(2):
temp = str_parser(s, i, i + k)
if len(temp) > len(ans) and len(temp) > 1:
return 1
return 0
def str_parser(s, l, r):
while l >= 0 and r < len(s):
if s[r] == s[l] and len(s[l:r+1]) > 1:
return s[l:r+1]
else:
l -= 1
r += 1
return ''
如果输入字符串包含回文,findPalindrome 函数返回 1,否则返回 0。
【问题讨论】:
-
一个简单的提示:从开头和结尾开始,比较每个字母直到到达中间。
-
@Aethernite 这是检查子串回文,而不仅仅是单词本身
-
检查 Manacher 的算法以找到 O(N) 中的所有子回文。您当然可以修改算法以在第一个找到的回文上返回 true。
标签: python string algorithm substring palindrome