LeetCode【5】Longest Palindromic Substring
2017-09-06 00:09
537 查看
题目:
Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.example
Input: "babad" Output: "bab" Note: "aba" is also a valid answer.
即给出一个字符串S,找到一个最长的连续回文串。
方法一:
简单易懂class Solution { int lo = 0, maxLen = 0; public String longestPalindrome(String s) { for (int i = 0; i < s.length(); i++) { helper(s, i, i); helper(s, i, i + 1); } return s.substring(lo, lo + maxLen); } private void helper(String str, int l, int r) { while (l >= 0 && r < str.length() && str.charAt(l) == str.charAt(r)) { l--; r++; } if (r - l - 1 > maxLen) { lo = l + 1; maxLen = r - l - 1; } } }
方法二:动态规划
这里动态规划的思路是 dp[i][j] 表示的是 从i 到 j 的字串,是否是回文串。则根据回文的规则我们可以知道:
如果s[i] == s[j] 那么是否是回文决定于 dp[i+1][ j - 1]
当 s[i] != s[j] 的时候, dp[i][j] 直接就是 false。
动态规划的进行是按照字符串的长度从1 到 n推进的。
代码很明晰:给出java代码,复杂度 O(n^2)
public class Solution{ static boolean [][]dp; public static String longestPalindrome(String s){ if (s.length() == 0){ return ""; } if(s.length() == 1){ return s; } dp = new boolean[s.length()][s.length()]; for (int i = 0;i<s.length();i++){ for (int j =0;j<s.length();j++){ if(i>=j){ dp[i][j] = true; }else { dp[i][j] = false; } } } int maxLen = 1; int rl = 0, rr = 0; for(int k = 1;k<s.length();k++){ for(int i = 0;k+i<s.length();i++){ int j = i+k; if (s.charAt(i) != s.charAt(j)){ //对字符串 s[i....j] 如果 s[i] != s[j] 那么不是回文 dp[i][j] = false; }else { //如果s[i] == s[j] 回文性质由 s[i+1][j-1] 决定 dp[i][j] = dp[i+1][j-1]; if(dp[i][j]){ if(k+1>maxLen){ maxLen = k+1; rl = i; rr = j; } } } } } return s.substring(rl, rr+1); } }
相关文章推荐
- LeetCode 5 Longest Palindromic Substring(Manacher算法)
- LeetCode - Longest Palindromic Substring
- [leetcode 5] Longest Palindromic Substring
- leetcode-5- Longest Palindromic Substring
- leetcode Longest Palindromic Substring(Java)
- [LeetCode] Longest Palindromic Substring
- Leetcode 5 Longest Palindromic Substring
- LeetCode之5_Longest Palindromic Substring
- 【LeetCode】Longest Palindromic Substring
- 算法分析与设计丨第十五周丨LeetCode(19)——Longest Palindromic Substring(Medium)
- Longest Palindromic Substring - LeetCode
- LeetCode-5-Longest Palindromic Substring(动态规划)-Medium
- [Leetcode]Longest Palindromic Substring
- LeetCode 5 Longest Palindromic Substring
- LeetCode_Longest Palindromic Substring
- LeetCode 5 Longest Palindromic Substring(最长子序列)
- leetCode No.5 Longest Palindromic Substring
- Leetcode 5. Longest Palindromic Substring
- [LeetCode]5. Longest Palindromic Substring
- 最长回文串:LeetCode:Longest Palindromic Substring