leetcode(5)—— Longest Palindromic Substring(最长回文子串)
来源:互联网 发布:餐馆软件 编辑:程序博客网 时间:2024/05/18 16:39
longest-palindromic-substring
法1:暴力搜索(但会超时)
遍历全部子串(
bool isPalindromic(string s){ int n = s.size(); int i = 0; while (i < n - 1 - i) { if (s[i] != s[n - 1 - i]) return false; ++i; } return true;}class Solution {public: string longestPalindrome(string s) { int max_len = 0; int idx = 0; int i, j; for ( i = 0; i < s.size() - 1; ++i) { for (j = i + 1; j < s.size(); ++j) { if (isPalindromic(s.substr(i, j - i + 1)) && j - i + 1> max_len) { max_len = j - i + 1; idx = i; } } } return s.substr(idx, max_len); }};
但会超时,不可取。
法2:动态规划
暴力搜索产生大量重复判断,也即动态规划中的重叠子问题,解决重叠子问题,自然跑不了使用动态规划。
- dp[i][j]:表示子字符串 s[i:j] 是否为回文;
- 初始化 dp[i][i] == true(自己到自己,单独的字符作为子串), dp[i][i-1] == true,其余为false
- dp[i][j] == (s[i] == s[j] && (dp[i+1][j-1]))
class Solution{public: string longestPalindrome(string s) { bool dp[1000][1000]; memset(dp, 0, sizeof(dp)); int n = s.size(); dp[0][0] = true; for (int i = 1; i < n; ++i) { dp[i][i] = true; dp[i][i-1] = true; } int lft = 0, rgt = 0; for (int k = 2; k <= n; ++k) { for (int i = 0; i <= n-k; ++i) // 注意:是可以取到 n-k 的,(n-1)-(n-k)+1 == k { if (s[i] == s[i+k-1] && dp[i+1][i+k-2]) { dp[i][i+k-1] = true; if (rgt-lft + 1 < k) { lft = i; rgt = i+k-1; } } } } return s.substr(lft, rgt-lft+1); }};
References
[1] LeetCode:Longest Palindromic Substring 最长回文子串
0 0
- 最长回文子串(LeetCode #5 Longest Palindromic Substring)
- leetcode(5)—— Longest Palindromic Substring(最长回文子串)
- [LeetCode]—Longest Palindromic Substring 最长回文子串
- LeetCode | Longest Palindromic Substring(最长回文子串)
- LeetCode 5. Longest Palindromic Substring(最长回文子串)
- LeetCode---5. Longest Palindromic Substring(最长回文子串)
- LeetCode-5 Longest Palindromic Substring(求最长回文子串)
- 转载:LeetCode:5Longest Palindromic Substring 最长回文子串
- [Leetcode #5]Longest Palindromic Substring 寻找最长回文子串
- leetcode (5) - Longest Palindromic Substring 最长回文子串
- LeetCode-5-Longest Palindromic Substring 最长回文子串DP
- [C++]LeetCode 5: Longest Palindromic Substring(最长回文子串)
- Leetcode刷题记录 · No.5 Longest Palindromic Substring(最长回文子串)
- 最长回文子串(Longest Palindromic Substring)
- Longest Palindromic Substring (最长回文子串)
- 最长回文子串(Longest Palindromic Substring )
- Longest Palindromic Substring(最长回文子串)
- Longest Palindromic Substring(最长回文子串)
- 517VPN只有唯一一个官网,大家要注意了
- C#编程基础 实验(6) (4-7)
- java对cookie的操作
- 在线编程--集合栈
- QT Webkit的插件Plugin设计实现
- leetcode(5)—— Longest Palindromic Substring(最长回文子串)
- 关于RK3288_M180_红外输入_投币输入IO使用说明
- 判断用户选择的日期是否为星期一
- 理解Java中的多态
- 总结前端面试过程中最容易出现的问题
- 使用Qt编写模块化插件式应用程序
- html5的几个Webapi
- JAVA IO-文件流
- Spring Data JPA自定义native 查询