//动态规划
//假设字符串下标为i到j之间判断是否是回文串,dp[i][j](其中i <= j),
//如果s.charAt(i)==s.chatAt(j)那么需要判断从下标i+1到下标j-1是否为回文串,即dp[i+1][j-1](其中i+1<=j-1)是否是回文串
//dp[i][j] = 1 (i==j)
// =s.charAt(i)==s.charAt(j) && dp[i+1][j-1] (i<=j-1)
public String longestPalindrome(String s) {
if(null == s || s.length() == 0) return s;
int sLen = s.length();
boolean[][] dp = new boolean[sLen][sLen];
int L = 0, R = 0;
int max = 0;
//init
for(int i = 0; i < sLen; i++) {
for(int j = 0; j < sLen; j++) {
if(i >= j) {
dp[i][j] = true;
}else {
dp[i][j] = false;
}
}
}
for(int j = 0; j < sLen; j++) {
for(int i = 0; i < j;i++) {
if(s.charAt(i) == s.charAt(j)) {
dp[i][j] = dp[i+1][j-1];
if(dp[i][j] && j - i + 1 >= max ){
L = i;
R = j;
max = j - i + 1;
}
}else {
dp[i][j] = false;
}
}
}
return s.substring(L, R + 1);
}
5.Longest Palindromic Substring
猜你喜欢
转载自blog.csdn.net/STU756/article/details/81677182
今日推荐
周排行