Longest Palindromic Substring

思路:

最长回文子字符串具有以下特性: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;
	}


你可能感兴趣的:(Longest Palindromic Substring)