Longest Palindromic Substring

来源:互联网 发布:c语言自学难吗 编辑:程序博客网 时间:2024/06/07 21:32

思路:

最长回文子字符串具有以下特性:S'是S的逆字符串,S'和S的最长公共子序列R,并且这个子序列R是回文串,则R是S的最长回文子串。

一开始不需要求S的逆字符串,否则会超时。直接用两次循环,来比较首尾字符串。下面是 

最长公共子序列(连续)的求解方法。

特别注意的是每得到一次结果,都得要判断一下这个结果是否是回文串。

public String longestPalindrome(String s){int len = s.length();int[][] ret = new int[len][len];int k=0;int end=0,max=0;for(int i=0;i<len;i++){for(int j=0;j<len;j++){k=len-1-j;if(s.charAt(i)==s.charAt(k)){if(i==0 || j==0){ret[i][j]=1;}else{ret[i][j]=ret[i-1][j-1]+1;}}else{ret[i][j]=0;}if(ret[i][j]>max && isPalindrome(s.substring(i-ret[i][j]+1,i+1))){max=ret[i][j];end=i;}}}return s.substring(end-max+1,end+1);}public boolean isPalindrome(String s){int len = s.length();for(int i=0;i<len/2;i++){if(s.charAt(i)!=s.charAt(len-1-i)){return false;}}return true;}


0 0
原创粉丝点击