Leetcode Algorithm 005. Longest Palindromic Substring
来源:互联网 发布:递归算法反汇编 编辑:程序博客网 时间:2024/05/27 00:41
Leetcode Algorithm 005. Longest Palindromic Substring
Longest Palindromic Substring
找出字符串中的最长回文子串
解题思路
假设有字符串s
,长度为n
,用L[i][j]
表示从s[i]
到s[j]
的回文字串长度。
枚举子串长度k = 1...n-1
,对于每个长度,枚举起始点i
以及结束点j = i + k
:
假如s[i] == s[j]
,而且L[i + 1][j - 1] > 0
(也是回文串) L[i][j] = L[i + 1][j - 1] + 2;
更新L[i][j]
的时候要更新最长回文子串的起始点和长度,从而得到最终的答案。
边界情况有:L[i][i] = 1
。假如s[i] == s[j] && i + 1 == j
时L[i][j] = 2
。其余位置为0。
代码
#include<iostream>#include<memory.h>using namespace std;class Solution {public: string longestPalindrome(string s) { int n = s.size(); int start = 0; int length = 1; int L[n][n]; memset(L, 0, sizeof(L)); for (int i = 0; i < n; i++) { L[i][i] = 1; } for (int k = 1; k < n; k++) { for (int i = 0, j = i + k; j < n; i++, j++) { if (s[i] == s[j]) { if (i + 1 <= j - 1) { L[i][j] = L[i + 1][j - 1] > 0 ? L[i + 1][j - 1] + 2 : 0; } else if (i + 1 == j) { L[i][j] = 2; } if (L[i][j] > length) { length = L[i][j]; start = i; } } } } return s.substr(start, length); }};int main() { string str; Solution s; while (cin >> str) { cout << s.longestPalindrome(str) << endl; } return 0;}
测试样例
babadcbbdaaaaabcbaabcda
输出
babbbaaaaabcbaa
0 0
- Leetcode Algorithm 005. Longest Palindromic Substring
- LeetCode Longest Palindromic Substring Part Manacher ALGORITHM
- Longest Palindromic Substring(leetcode medium algorithm problem)
- LeetCode 005. Longest Palindromic Substring
- 【LeetCode】005.Longest Palindromic Substring
- leetcode--005. Longest Palindromic Substring
- 【LeetCode】 005. Longest Palindromic Substring
- LeetCode 005. Longest Palindromic Substring
- 【LeetCode】005.Longest Palindromic Substring
- Longest Palindromic Substring (Manacher Algorithm)
- LeetCode 5. Longest Palindromic Substring---Manacher's Algorithm
- 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
- 多表查询与操作关联表
- LINUX下Socket编程 函数格式详解
- iOS路由跳转(四)之JKRouter持续更新1
- idea添加其他包的方法
- Java 中的 static 使用之静态方法
- Leetcode Algorithm 005. Longest Palindromic Substring
- 基于Mojo的perl爬虫
- HDU2141-Can you find it?
- 如何访问一个控件的 Protected 段的成员,改变 DBNavigator 的行为
- 夜间车辆识别
- LeetCode (Set Matrix Zeroes)
- 计算一个字符串中的字串
- $.ajax()引发的对Deferred的总结
- Java环境配置