Leetcode: 5 Longest Palindromic Substring 最长回文子串
2018-03-21 19:40
603 查看
Discription:
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.
Example:
Input: “cbbd”
Output: “bb”
分析
求一个字符串的最长回文子串,子串必须得是连续的,不是子序列。暴力方法就不想了,处理回文串的一种方法是dp动态规划。dp[i][j]记录给定字符串i-j是否是回文子串,若是记为1,;否则为0
则:
dp[i][j]=(s[i]==s[j]&&dp[i+1][j-1])
也就是将全部dp先初始化为0,然后所有的长度为1的子串肯定为1.也就是dp[i][i]=1;
然后查长度为2的子串:若s[i]==s[i+1]则dp[i][i+1]=1;
然后遍历三个及以上长度的子串,开始为i,末端索引j=i+k-1 (k为子串长度)
用st,en分别记录子串开始和尾端索引,输出即可
代码
string longestPalindrome(string s) { int len = s.size(); if (len <= 1)return s; int st=0, en=0,l;//l记录最长回文子串长度,本题用不着 bool dp[1001][1001]; memset(dp, 0, sizeof(dp)); for (int i = 0; i<len; i++) { dp[i][i] = 1; } for (int i = 0; i<len - 1; i++) { if (s[i] == s[i + 1]) { dp[i][i + 1] = 1; l = 2; st = i; en = i + 1; } } for (int k = 3; k <= len; k++) { for (int i = 0; i + k - 1<len; i++){ int j = i + k - 1;//右端索引 if (s[j] == s[i] && dp[i + 1][j - 1]) { dp[i][j] = 1; l = k; st = i; en = j; } } } string ans = ""; for (int k = st; k <= en; k++) { ans += s[k]; } return ans; }
注意
st en一开始就要初始化,否则可能在最后遍历st-en时运行时错误相关文章推荐
- [C++]LeetCode: 99 Longest Palindromic Substring (最长回文子串)
- [LeetCode] Longest Palindromic Substring 最长回文子串
- [Leetcode] Longest palindromic substring 最长回文子串
- [LeetCode]—Longest Palindromic Substring 最长回文子串
- LeetCode 5. Longest Palindromic Substring(最长回文连续子串)
- LeetCode 5 Longest Palindromic Substring(最长回文子串,暴力剪枝/DP/曼彻斯特算法)
- 最长回文子串-LeetCode 5 Longest Palindromic Substring
- 【LeetCode】Longest Palindromic Substring && 【九度】题目1528:最长回文子串(腾讯2013年实习生招聘二面面试题)
- LeetCode-5-Longest Palindromic Substring 最长回文子串DP
- 【LeetCode刷题】最长回文子串Longest Palindromic Substring(java)
- LeetCode:Longest Palindromic Substring 最长回文子串
- 【LeetCode-面试算法经典-Java实现】【005-Longest Palindromic Substring(最长回文子串)】
- [C++]LeetCode 5: Longest Palindromic Substring(最长回文子串)
- LeetCode Longest Palindromic Substring(最长回文子串)
- LeetCode | Longest Palindromic Substring(最长回文子串)
- LeetCode-5 Longest Palindromic Substring(求最长回文子串)
- LeetCode题库解答与分析——#5.最长回文子串LongestPalindromicSubstring
- LeetCode:5_Longest Palindromic Substring | 最长的回文子串 | Medium
- LeetCode---5. Longest Palindromic Substring(最长回文子串)
- LeetCodeOJ_5_m_Longest Palindromic Substring(最长回文子串)