标签:char example str als null long 大连 xtend 偶数
Given a string s, find the longest palindromic substring in s.
You may assume that the maximum length of s is 1000.
Example: Input: "babad" Output: "bab" Note: "aba" is also a valid answer.
Example: Input: "cbbd" Output: "bb"
中心扩散法 Spread From Center
时间 O(n^2) 空间 O(1)
动态规划虽然优化了时间,但也浪费了空间。实际上我们并不需要一直存储所有子字符串的回文情况,我们需要知道的只是中心对称的较小一层是否是回文。所以如果我们从小到大连续以某点为个中心的所有子字符串进行计算,就能省略这个空间。 这种解法中,外层循环遍历的是子字符串的中心点,内层循环则是从中心扩散,一旦不是回文就不再计算其他以此为中心的较大的字符串。由于中心对称有两种情况,一是奇数个字母以某个字母对称,而是偶数个字母以两个字母中间为对称,所以我们要分别计算这两种对称情况.
class Solution {
private int left, right;
public String longestPalindrome(String s) {
if (s == null || s.length() == 0) {
return null;
}
if (s.length() < 2) {
return s;
}
for (int i = 0; i < s.length() - 1; i++) {
extendPalindrome(s, i, i);
extendPalindrome(s, i, i + 1);
}
return s.substring(left, right);
}
private void extendPalindrome(String s, int j, int k) {
while (j >= 0 && k < s.length() && s.charAt(j) == s.charAt(k)) {
j--;
k++;
}
if (right - left < k - j) {
left = j + 1;
right = k;
}
}
}
5. Longest Palindromic Substring
标签:char example str als null long 大连 xtend 偶数
原文地址:http://www.cnblogs.com/apanda009/p/7584274.html