【LeetCode】LeetCode——第5题: Longest Palindromic Substring
来源:互联网 发布:java在线答题系统源码 编辑:程序博客网 时间:2024/05/29 00:34
5. Longest Palindromic Substring
My SubmissionsTotal Accepted: 105007 Total Submissions: 456372 Difficulty: Medium
Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.
Subscribe to see which companies asked this question
Show Similar Problems
题目的大概意思是:给定一个字符串,求出其最长的回文子串。
这个题难度等级:中等
此题,一般情况下有几种解法:① 暴力解法 ②枚举法
暴力解法:
思路是:找出该字符串中的所有子串,然后找到最长的回文子串。但是这种方法因时间复杂度很高,并不能AC掉该题。
枚举法:
思路是:充分利用已知信息,即:若下标为[l,r]的子串不是回文子串,则[l-1,r+1]肯定也不是回文子串。因此,遍历下标,比如在下标为i时,初始化l=r=i,再将l、r下标往两边扩,记录长度最长的回文子串。
这里要注意回文子串长度是奇数还是偶数的情况,代码如下:
class Solution {public: string longestPalindrome(string s) { // 字符串长度 int n = s.length(); // 维护最长的答案 string ans = ""; // 枚举对称点是一个字符的所有情况 for (int i = 0; i < n; i++) { // 在满足对称的情况下不断拓展长度 int l = i, r = i; while (l > 0 && r < n - 1 && s[l - 1] == s[r + 1]) { l --; r ++; } // 与当前答案作比较 if (r - l + 1 > ans.length()) { ans = s.substr(l, r - l + 1); } } // 枚举对称点是两个字符中间的所有情况 for (int i = 0; i < n - 1; i++) if (s[i] == s[i + 1]) { // 注意初值的改变 int l = i, r = i + 1; while (l > 0 && r < n - 1 && s[l - 1] == s[r + 1]) { l --; r ++; } if (r - l + 1 > ans.length()) { ans = s.substr(l, r - l + 1); } } // 返回答案 return ans; }};这种方法能够顺利的AC掉该题,Runtime: 60 ms。
还有种可以不判断奇偶的方法,就是在每个字符之间插入一个相同的字符(比如:'&'),使得所有的会问子串都是奇数的。代码如下:
class Solution {public:string longestPalindrome(string s) {for (int i = 0; i < s.length(); i+=2){s.insert(i, 1, '&');}s.insert(s.length(), 1, '&');string str;int maxlen = 0;for (int i = 0; i < s.length(); ++i){int l = i, r = i;while(l >= 0 && r < s.length() && s[l] == s[r]){--l;++r;}int len = r - l - 1;if (len > maxlen ){maxlen = len;str = s.substr(l + 1, len);}}for (int i = 0; i < str.length(); ++i){str.erase(i, 1);}return str;}};这种方法也能够AC掉题目,但是由于有插入操作,以及字符串长度增长了一倍,所以时间上有点吃亏。Runtime: 156 ms。
0 0
- 【LeetCode】LeetCode——第5题: Longest Palindromic Substring
- leetcode第5题——**Longest Palindromic Substring
- leetcode 第5题 Longest Palindromic Substring
- leetcode 第5题 Longest Palindromic Substring
- leetCode—Longest Palindromic Substring
- leetcode—Longest Palindromic Substring
- leetcode 5—— Longest Palindromic Substring
- LeetCode——Longest Palindromic Substring
- leetcode——Longest Palindromic Substring
- leetcode 005 —— 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(5) Longest Palindromic Substring
- Leetcode【5】:Longest Palindromic Substring
- [leetcode 5] Longest Palindromic Substring
- Hadoop 架构
- 转载一篇很好的mysql锁分析的文章
- Hadoop简介
- nyoj 448 素数环
- 1014
- 【LeetCode】LeetCode——第5题: Longest Palindromic Substring
- Servlet的生命周期
- Eclipse安装SVN插件
- Laravel5.2多对多的实现
- Linux下压缩某个文件夹(文件夹打包)
- Web Service 那点事儿(2)—— 使用 CXF 开发 SOAP 服务
- javascript冒泡事件的意义及如何阻止冒泡事件
- HDU 3622 Bomb Game 2-sat +2分
- Trie树(c++实现)