题目原型:
Given a string S, find the longest palindromic
substring in S. You may assume that the maximum length of S is
1000, and there exists one unique longest palindromic substring.
基本思路:
动态规划,利用一个table表存放某个字符到另一个字符之间是否是回文。例如要判断i和j之间的字符串是否是回文,那么我们就要判断s[i]?=s[j]和i+1与j-1之间是字符串是否是回文。
public String longestPalindrome(String s) { if(s==null||s.length() ==0) return s; if(s.length()==1) return s; boolean[][] table = new boolean[s.length()][s.length()]; for(int i = 0;i<table.length;i++) { for(int j = 0;j<table.length;j++) table[i][j] = true; } String str = genTable(table, s); return str; } //产生table表 public String genTable(boolean[][] table,String s) { String str = ""; //根据间距从小到大来遍历 for(int dis = 1;dis<table.length;dis++) { boolean isGet = false; for(int i = 0,j = i+dis;j<table.length;i++,j++) { table[i][j] = (table[i+1][j-1]&&(s.charAt(i)==s.charAt(j))); if(table[i][j]) { if(isGet==false) { str = s.substring(i,j+1);//尽量少用次行,太耗时,由于这一层中间距是一样的,所以str只赋值一次就行了 isGet = true; } } } } return str; }
Longest Palindromic Substring,布布扣,bubuko.com
原文:http://blog.csdn.net/cow__sky/article/details/21870763