【发布时间】:2021-04-26 06:37:08
【问题描述】:
这是我目前的做法:
def isPalindrome(s):
if (s[::-1] == s):
return True
return False
def solve(s):
l = len(s)
ans = ""
for i in range(l):
subStr = s[i]
for j in range(i + 1, l):
subStr += s[j]
if (j - i + 1 <= len(ans)):
continue
if (isPalindrome(subStr)):
ans = max(ans, subStr, key=len)
return ans if len(ans) > 1 else s[0]
print(solve(input()))
我的代码超出了自动评分系统的时间限制。我已经花了一些时间在谷歌上查找,我发现的所有解决方案都有相同的想法,没有优化或使用动态编程,但遗憾的是我必须而且只能使用蛮力来解决这个问题。我试图通过跳过所有比最后找到的最长回文字符串短的子字符串来更早地打破循环,但最终仍无法满足时间要求。有没有其他方法可以比上述方法更早或更省时地打破这些循环?
【问题讨论】:
-
“很遗憾,我必须而且只能使用蛮力来解决这个问题” - 为什么会这样?
-
课堂作业要求学生只使用蛮力。
-
课堂作业需要蛮力?这对我来说有意义的唯一方法是,如果他们试图证明蛮力并不总是足够快,并且即将出现的一些问题要求您找到一种总是及时完成的非蛮力方法。跨度>
-
@blhsing 的答案在哪里?它唯一的缺点是它甚至不能处理回文......
-
@DuongPham GFG 的蛮力方法成本 O(n^3) 因为它重复了内部子字符串的比较,而我的解决方案没有。使用两个嵌套循环,我的解决方案成本 O(n^2) 代替。顺便说一句,我确实为偶数长度回文修复了我的解决方案。
标签: python algorithm palindrome brute-force