[Palindrome] Check any substring in a s is a palindrome or not.
2019-05-25 09:57 Johnson_强生仔仔 阅读(325) 评论(0) 编辑 收藏 举报Give a s, need to check every substring whether it is a palindrome or not.
Brute Force
T: O(n ^3)
我们利用如果s[start] == s[end], 则只需要判断s[start + 1][end - 1]是否为palindrome即可。
T: O(n ^2)
所以我们利用O(n^2) 的space来提升速度, palin[i][j] 是指s[i : j + 1] is a palindrome or not.
Code
class Solution: def checkPalin(self, s): n = len(s) palin = [[False] * n for _ in range(n)] for i in range(n): palin[i][i] = True if i and s[i] == s[i - 1]: palin[i - 1][i] = True # note: it is [i - 1][i] for length in range(2, n): for start in range(n): if start + length < n and s[start] == s[start + length]: palin[start][start + length] = palin[start + 1][start + length - 1] return palin