Leetcode解题笔记 5.Longest Palindromic Substring [Medium] 动态规划解法
来源:互联网 发布:上海淘宝运营助理招聘 编辑:程序博客网 时间:2024/06/06 00:05
注:实现中参照了http://blog.csdn.net/ebowtang/article/details/50698672的代码
解题思路
题目要求我们寻找长度最长的子字符串,考虑到由于题目符合运用动态规划的3个性质——最优化原理、无后效性、有重叠子问题,所以可以用动态规划的方法。难点在于构造如何设定子问题,怎么初始化,以及怎么遍历。
构建子问题:
设d[i][j]表示字符串s从第i个字符到第j个字符为回文(字符串从0开始),则
若d[i+1][j-1] == true,并且s[i] == s[j],则d[i][j] == true;
初始化
由于算法运行只能判断3个字符以上回文的情况,我们要预先对d[i][i], d[i][i+1]进行赋值。
遍历
为了避免考虑字符串边界的问题,需要谨慎设计循环,参考上面给出的链接,里面没有直接拿i
,j
去进行循环,而是巧妙地把j
设为i - len + 1
,从而避免了出界。
代码
#define MAX_N 1000string longestPalindrome(string s) { bool f[MAX_N][MAX_N] = {false}; // 情况一 int begin = 0; int maxLen = 1; for (int i = 0; i < s.length(); i++) { f[i][i] = true; } // 情况二 for (int i = 0; i < s.length() - 1; i++) { if (s[i] == s[i + 1]) { begin = i; maxLen = 2; f[i][i + 1] = true; } } // 情况三 for (int len = 3; len <= s.length(); len++) { for (int i = 0; i < s.length() - len + 1; i++) { int j = i + len - 1; if (s[i] == s[j] && f[i + 1][j - 1]) { maxLen = len; begin = i; f[i][j] = true; } } } return s.substr(begin, maxLen);}
阅读全文
0 0
- Leetcode解题笔记 5.Longest Palindromic Substring [Medium] 动态规划解法
- LeetCode-5-Longest Palindromic Substring(动态规划)-Medium
- Leetcode 5. Longest Palindromic Substring (Medium) (cpp)
- (Leetcode)5. Longest Palindromic Substring(medium)
- leetcode-5-Longest Palindromic Substring 动态规划
- [LeetCode]05. Longest Palindromic Substring (动态规划)
- Leetcode(W7):5. Longest Palindromic Substring(动态规划)
- [leetcode] 5. Longest Palindromic Substring 解题报告
- 【Leetcode】5.Longest Palindromic Substring 解题
- Leetcode 5. Longest Palindromic Substring 解题报告
- [Leetcode] 5. Longest Palindromic Substring 解题报告
- leetcode解题报告5. Longest Palindromic Substring
- LeetCode 5. Longest Palindromic Substring 解题报告
- 5. Longest Palindromic Substring Medium
- 5. Longest Palindromic Substring 动态规划
- 【LeetCode】5. Longest Palindromic Substring最大Palindromic字符串|DP动态规划
- 题解——Leetcode 5. Longest Palindromic Substring 难度:Medium
- [Leetcode 5, Medium] Longest Palindromic Substring
- JZOJsenior3541.【清华集训2014】破冰派对
- 等比矩阵求和超简法及其python代码10行实现
- spring-boot+Java8
- extern
- python selenium+PIL+免验证码登陆
- Leetcode解题笔记 5.Longest Palindromic Substring [Medium] 动态规划解法
- 学习分布式缓存技术Redis系列(总序)
- openvr_survivor第二期开发活动:VR畸变
- Sqoop导入与导出底层
- Docker Kubernetes1.5.2集群环境搭建(CentOS)
- CPPAN:C++ 档案网络
- STM32存储器结构
- Struts2学习
- 写给身为程序员的一些话(非鸡汤,只是一些发自内心的话)