classSolution: deflongestPalindrome(self, s: str) -> str: sLen = len(s) if sLen < 2: return s maxLen = 1 begin = 0 dp = [[False] * sLen for _ in range(sLen)] for i in range(sLen): dp[i][i] = True for length in range(2, sLen+1): for left in range(sLen): right = length + left - 1 if right >= sLen: break if s[left] != s[right]: dp[left][right] = False else: if right - left < 3: dp[left][right] = True else: dp[left][right] = dp[left+1][right-1] if dp[left][right] and right-left+1 > maxLen: maxLen = right - left + 1 begin = left return s[begin: begin+maxLen]
classSolution { public: stringlongestPalindrome(string s){ int sLen = s.size(); if (sLen < 2) { return s; }
int maxLen = 1; int begin = 0; vector<vector<int>> dp(sLen, vector<int>(sLen)); for (int i = 0; i < sLen; i++) { dp[i][i] = true; } for (int length = 2; length <= sLen; length++) { for (int left = 0; left < sLen; left++) { int right = left + length - 1; if (right >= sLen) { break; }
funclongestPalindrome(s string)string { var result string var sLen = len(s) var dp = make([][]int, sLen) for i, _ := range dp { dp[i] = make([]int, sLen) } for i := 0; i < sLen; i++ { for left := 0; left+i < sLen; left++ { right := left + i if i == 0 { dp[left][right] = 1 } elseif i == 1 { if s[right] == s[left] { dp[left][right] = 1 } } else { if s[right] == s[left] { dp[left][right] = dp[left+1][right-1] } } if dp[left][right] == 1 && i + 1 > len(result) { result = s[left: right+1] } } } return result }