最长回文子串 leetcode 05 DP解法
来源:互联网 发布:lol有mac国服版本吗 编辑:程序博客网 时间:2024/06/04 18:19
<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)的好方法。
0 0
- 最长回文子串 leetcode 05 DP解法
- 寻找最长回文子串 Longest Palindrome DP解法
- 最长回文子串的不同解法
- 最长回文子串解法详解
- hihocoder 最长回文子串简单解法
- 最长回文子串-解法一
- 最长回文子串的解法
- LeetCode-5-Longest Palindromic Substring 最长回文子串DP
- leetcode:最长回文子串
- Leetcode#5. Longest Palindromic Substring(最长回文子串:二种解法)
- 搜寻最长回文子串的解法之比较
- 最长回文子串的三种解法
- 最长回文子串的几种解法
- 求最长回文子串(多种解法)
- 最长回文子串的4种解法
- 最长回文子串的三种解法
- 【LeetCode 214】最长回文子串
- leetcode 第五题 最长回文子串
- Github上的PHP资源汇总
- 那些年专注于SDN的组织与他们的控制器
- Python 中文乱码matplotlib乱码 (Windows)
- (1157)POJ
- Android 后退键onBackPressed()的使用介绍
- 最长回文子串 leetcode 05 DP解法
- Android DrawerLayout+fragment布局实现左右侧滑
- threaded interrupt handler support
- C++ 智能指针详解
- concurrentHashMap 到底采取了什么措施使得它比synchronized(HashMap)好
- iOS-不用ID的打包方法
- 菜鸟学习Spring——SpringMVC注解版将URL中的参数转成实体
- 关于spring,IOC和AOP的解析原理和举例
- Android——硬件加速(Hardware Acceleration)