题目链接:longest-substring-without-repeating-characters
/**
*
* 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.
*
*/
public class LongestPalindromicSubstring {
//参考文章:http://articles.leetcode.com/2011/11/longest-palindromic-substring-part-i.html
<p class="p1">//<span style="white-space:pre"> </span>http://en.wikipedia.org/wiki/Longest_palindromic_substring</p>
//动态规划
//时间复杂和空间复杂度均为O(n * n)
// 88 / 88 test cases passed.
// Status: Accepted
// Runtime: 319 ms
// Submitted: 0 minutes ago
static String longestPalindrome(String s) {
int length = s.length();
if(length == 0) return s;
int beginIndex = 0;
int maxLen = 1;
boolean flag[][] = new boolean[length][length];
//maxLen = 1;
for(int i = 0; i < length; i++)
flag[i][i] = true;
//maxLen = 2;
for(int i = 0; i < length - 1; i ++) {
if(s.charAt(i) == s.charAt(i + 1)) {
flag[i][i + 1] = true;
beginIndex = i;
maxLen = 2;
}
}
//maxLen > 2;
for(int len = 3; len <= length; len++) {
for(int i = 0; i < length - len + 1; i++) {
int j = i + len - 1;
if(s.charAt(i) == s.charAt(j) && flag[i + 1][j - 1]) {
flag[i][j] = true;
beginIndex = i;
maxLen = len;
}
}
}
return s.substring(beginIndex, beginIndex + maxLen);
}
public static void main(String[] args) {
System.out.println(longestPalindrome("abcdedcba"));
}
}