Leetcode 题解系列(二)
来源:互联网 发布:燃烧热数据 编辑:程序博客网 时间:2024/06/07 23:43
Longest Palindromic Substring
题目要求
Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.Example:Input: "babad"Output: "bab"Note: "aba" is also a valid answer.Example:Input: "cbbd"Output: "bb"
题目分析
1. 最初想法
一个对称的串,与它的翻转是相同的。那么,最长的对称子串就是其与其翻转的最长公共部分,用最长公共子串来做就好了。
然而这是一个错误的方法(虽然可以通过)。由于最长公共的部分不一定是原先的部分的翻转,这里会出现过长的错误答案。举个栗子,串"abcdba"
,"ab"
会与翻转后的"ba"
错误的匹配,这并不是我们想要的。
那么怎么解决呢?其实也很简单,对于得到的最长匹配做一下检查,判断是不是对称的就好。
2. 从中心向两侧扩展
对称子串的中心想两侧伸展,可以求得以这个为中心的最长对称子串。那么,对于所有中心进行一次遍历,那么就可以实现求得最长对称子串的方法。中心的数量是
string longestPalindrome(string s) { int start = 0, end = 0; for (int i = 0; i < s.size(); i++) { // 中间是字符 int k = i, j = i; while (j >= 0 && k < s.size() && s[k] == s[j]) j--, k++; // 中间是字符间隔 int len = k - j - 1; k = i + 1, j = i; while (j >= 0 && k < s.size() && s[k] == s[j]) j--, k++; len = std::max<int>(len, k - j - 1); if (len > end - start) { start = i - (len - 1) / 2; end = i + len / 2 + 1; } } return s.substr(start, end - start); }
3. 马拉车算法
从网上查得最优算法是马拉车算法,日后再更新吧
阅读全文
0 0
- Leetcode 题解系列(二)
- Leetcode 题解系列(一)
- Leetcode 题解系列(三)
- Leetcode 题解系列(四)
- Leetcode 题解系列(五)
- Leetcode 题解系列(六)
- Leetcode 题解系列(七)
- Leetcode 题解系列(八)
- Leetcode 题解系列(九)
- Leetcode 题解系列(十)
- Leetcode 题解系列(十一)
- Leetcode 题解系列(十三)
- Leetcode 题解系列(十二)
- LeetCode OJ题解系列
- LeetCode题解(二)
- LeetCode Single Number系列题解
- LeetCode题解整理版(二)
- LeetCode题解整理版(二)
- Maven编译报:编码GBK的不可映射字符与程序包org.junit.runner不存在
- MFC入门经典
- 群赛14----2017.9.24
- 计数系统,架构与优化细节
- [BZOJ1509][NOI2003]逃学的小孩(链上乱搞)
- Leetcode 题解系列(二)
- [leetcode] DFS 之 Path Sum 2
- 字符数组和字符指针
- 斐波那契数列的各种求法
- hibernate自动生成实体类和映射文件
- Leetcode [Roman to Integer]
- 文章标题
- 【Java基础】Class.isAssignableFrom与 instanceof 区别
- 学习心得