[leetcode-Q5] Longest Palindromic Substring
来源:互联网 发布:js实现分页 编辑:程序博客网 时间:2024/06/02 13:10
要求一个字符串的最长回文子字符串。
暴力解法的时间复杂度为 O3
下面提供一个时间复杂度为 O2 的解法
动态规划法
动态规划是在暴力解法上进行优化,通过激励一些我们需要的东西,来避免暴力解法中很多重复的判断。
假设 flag[i][j]
表示子串 s[i ... j]
是否时回文,那么对于动态规划表 flag 的打表方式如下:
初始化:
{flag[i][j]=trueothers=false(i>=j) 状态转移方程:
flag[i][j]={flag[i+1][j−1]falseifs[i]==s[j]ifs[i]!=s[j]
代码实现如下:(附带测试程序)
#include <iostream>#include <vector>using namespace std;string longestPalindrome(string s) { int len = s.size(); if (len == 1) return s; int start, max = 0; bool flag[len][len]; for (int i = 0; i < len; i++) for (int j = 0; j < len; j++) { if (i >= j) flag[i][j] = true; else flag[i][j] = false; } for (int j = 1; j < len; j++) for (int i = 0; i < j; i++) { if (s[i] == s[j]) { flag[i][j] = flag[i + 1][j - 1]; if (flag[i][j] == true && j - i + 1 > max) { max = j - i + 1; start = i; } } else flag[i][j] = false; } return s.substr(start, max);}int main () { string s = "abcdeedcbaaksdlfkk"; cout << longestPalindrome(s) << endl; string ss = "a"; cout << longestPalindrome(ss) << endl; string sss = "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"; cout << longestPalindrome(sss) << endl; return 0;}
还有其他更优的解法,有时间了再来补充完善。
0 0
- Leetcode Q5:Longest Palindromic Substring
- [leetcode-Q5] Longest Palindromic Substring
- LeetCode: Longest Palindromic Substring
- LeetCode Longest Palindromic Substring
- LeetCode: Longest Palindromic Substring
- [Leetcode] Longest Palindromic Substring
- [LeetCode] Longest Palindromic Substring
- Leetcode : Longest Palindromic Substring
- [LeetCode]Longest Palindromic Substring
- leetcode Longest Palindromic Substring
- LeetCode-Longest Palindromic Substring
- [LeetCode] Longest Palindromic Substring
- Longest Palindromic Substring leetcode
- LeetCode Longest Palindromic Substring
- LeetCode - Longest Palindromic Substring
- LeetCode -- Longest Palindromic Substring
- LeetCode | Longest Palindromic Substring
- LeetCode: Longest Palindromic Substring
- UIView
- [Matlab]使用Simulink进行UDP通讯2
- 互联网+,创业者真正准备好了吗?
- poj 3468 A Simple Problem with Integers(线段树)
- 集训队专题(6)1003 50 years, 50 colors
- [leetcode-Q5] Longest Palindromic Substring
- 全面复习之 java IO流总结
- 简单的对象属性值对比方法
- BroadCastReceiver
- ISE与Modelsim联合仿真配置和技巧
- leetcode_001 two sum
- 欢迎使用CSDN-markdown编辑器
- 【转载】错排问题
- 消息队列------ActiveMQ