最长回文子串(Longest Palindromic Substring)

这算是一道经典的题目了,最长回文子串问题是在一个字符串中求得满足回文子串条件的最长的那一个。常见的解题方法有三种:

(1)暴力枚举法,以每个元素为中心同时向左和向右出发,复杂度O(n^2);

(2)动态规划法,复杂度O(n^2)。设f[i][j]表示[i,j]之间最长回文子串,递推方程见链接

对于暴力枚举的方法,这里有一个简单的Java实现,要好好理解。

    public String longestPalindrome(String s) {
int start = 0, end = 0;
int maxLen = 1;
for (int i = 0; i < s.length(); i++) {
int left = i;
int right = i;
while (left > -1 && right < s.length() && s.charAt(left) == s.charAt(right)) {
left--;
right++;
}
if (maxLen < right - left + 1) {
maxLen = right - left + 1;
start = left + 1;
end = right - 1;
} left = i;
right = i + 1;
while (left > -1 && right < s.length() && s.charAt(left) == s.charAt(right)) {
left--;
right++;
}
if (maxLen < right - left + 1) {
maxLen = right - left + 1;
start = left + 1;
end = right - 1;
} }
return s.substring(start, end + 1);
}

  

上一篇:App架构师实践指南一之App基础语法


下一篇:在chrome中使用axure生成原型的问题