最长回文子串 leetcode 05 DP解法
2015-01-26 14:44
399 查看
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">找出最长回文子串,马上想到了用DP,用 dp[ i ][ j ] = 1表示s[ i ]----s[ j ]是一个回文串 dp[ i ][ j ] = 0就表示s[ i ]---[ j ]为非回文,方程可以表示为 </span>
if(s[ i ]==s[ j ]) dp[ i ][ j ] = dp[ i+1 ][ j-1 ],其实也可以明确为,前一个子串是回文串的,当前才继续做判断,否则直接不管,可以细化为
if(s[ i ]==s[ j ] && dp[ i+1 ][ j-1 ] == 1) dp[ i ][ j ] = 1; 之后记录此时的长度和起点,下面是代码
class Solution { public: string longestPalindrome(string s) { int judge[1000][1000] = {0}; int start = 0; int maxLength = 1; for(int i=0;i<s.length();i++) { judge[i][i] = 1; } for(int i=0;i<s.length()-1;i++) { if(s[i] == s[i+1]) { judge[i][i+1] = 1; maxLength = 2; start = i; } } for(int tempLen=3;tempLen<=s.length();tempLen++) { for(int i=0;i<s.length()-tempLen+1;i++) { int j=i+tempLen-1; if(s[i]==s[j] && judge[i+1][j-1] == 1) { judge[i][j] = 1; maxLength = tempLen; start = i; } } } return s.substr(start,maxLength); } };跟之前java不同的是,C++的字符串可以直接取下标,方便了不少,还有substr函数,参数分别是起点和长度,而不是起点和终点的下标。DP开始之前,可以先做初始化,因为每个字符自己本身是一个长度为1的回文串,还有i到i+1长度为2的子串要是是回文串的话必须是两个一样的字符,做完初始化之后可以开始做DP。时间复杂度为O(N^2),略慢,之后再研究一下传说中复杂度为O(N)的好方法。
相关文章推荐
- LeetCode 5 Longest Palindromic Substring(最长回文子串,暴力剪枝/DP/曼彻斯特算法)
- LeetCode-5-Longest Palindromic Substring 最长回文子串DP
- leetcode 5. Longest Palindromic Substring 最长回文子串的查找 + 按照length做DP
- 【LeetCode】Longest Palindromic Substring && 【九度】题目1528:最长回文子串(腾讯2013年实习生招聘二面面试题)
- [LeetCode]—Longest Palindromic Substring 最长回文子串
- LeetCode:Longest Palindromic Substring 最长回文子串
- 最长回文子串解法详解
- 最长回文子串-LeetCode 5 Longest Palindromic Substring
- LeetCode:Longest Palindromic Substring 最长回文子串
- 2014再见 2015你好 【附带】[LeetCode]最长回文子串
- [C++]LeetCode 5: Longest Palindromic Substring(最长回文子串)
- LeetCode 5 最长回文子串 Manacher线性算法
- USACO 1.3 Calf Flac (最长回文子串 DP动态规划)
- Longest Palindromic Substring [LeetCode] 最长回文子串
- LeetCode之“字符串”:最长回文子串
- HDU 3294Girls' research最长回文子串(暴力和manacher 两种解法)
- LeetCode Longest Palindromic Substring(最长回文子串)
- 最长回文子串的三种解法
- 最长回文子串的不同解法
- 【LeetCode-面试算法经典-Java实现】【005-Longest Palindromic Substring(最长回文子串)】