leetcode-5
/*Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.
Example 1:
Input: “babad”
Output: “bab”
Note: “aba” is also a valid answer.
Example 2:
Input: “cbbd”
Output: “bb”
*/
/**
*
- @author administered
- 使用dp进行求解
- path[i][j] 表示从i到j是否为回文串,如果是则为1 ,否则0
- i=j
*/
public class Solution5 {
public static String longestPalindrome(String s) {
if (s == null || s.length() < 2) {
return s;
}
char[] chs=s.toCharArray();
int bp[][]=new int[chs.length][chs.length];
int start=0;
int end=0;
int big=0;
//初始化
for(int i=0;i<chs.length;i++) {
bp[i][i]=1;
}
for(int i=0;i<chs.length-1;i++) {
if(chs[i]==chs[i+1]) {
bp[i][i+1]=1;
}
}
for(int l=1;l<chs.length;l++) {
for(int i=0;i+l<chs.length;i++) {
int j=i+l;
System.out.println("i:"+i);
System.out.println("j:"+j);
System.out.println("chsi:"+chs[i]);
System.out.println("chsj:"+chs[j]);
System.out.println("bp[i+1][j-1]:"+bp[i+1][j-1]);
if(chs[i]==chs[j]&&bp[i+1][j-1]==1) {
bp[i][j]=1;
}
}
}
//遍历
for(int i=0;i<chs.length;i++) {
for(int j=i;j<chs.length;j++) {
if(j-i+1>big&&bp[i][j]==1) {
big=j-i+1;
start=i;
end=j;
}
}
}
for(int i=0;i<chs.length;i++) {
for(int j=0;j<chs.length;j++) {
System.out.print(bp[i][j]+"\t");
}
System.out.println("");
}
String r=s.substring(start,end+1);
return r;
}
public static void main(String args[]) {
String ch="ccc";
String r=Solution5.longestPalindrome(ch);
System.out.print(r);
}
}