5. Longest Palindromic Substring (Medium)
来源:互联网 发布:java中的工厂模式 编辑:程序博客网 时间:2024/05/29 12:33
原题目:
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”
题目大意如下:
从一个string中找到其最长的回文子串。
解题思路:
回文:正读和反读都相同的字符序列为“回文”。
例如:
123321,aaaa,aba等等
首先,我们注意到具有重复字符的子串部分一定是回文。
然后,如果一个字符串是回文那么它必定从中间开始左右是对称的。
所以我们遍历整个字符串,对于每个字符i进行扩展:(设r为当前字符i的下一个字符,l为当前字符的前一个字符,初始时i == r == l)
①若s[r] == s[r + 1] ,当r < s.size() - 1, 即往右拓展时有重复字符时,++r ;
②若s[r] == s[l],即符合“对称”条件时,++r且- -l ;
③记录下区间长度(r - l + 1)和起始坐标start_index == l ,返回子串即可。
第一第二种情况我们分别用一个while循环即可。
注:我们并不需要往左拓展时检查有无重复字符,因为我们最外层的遍历是从左到右的。
代码如下:
class Solution {public: string longestPalindrome(string s) { if(s.empty()) return s ; if(s.size() == 1) return s ; int i = 0 ; int max_len = 0 , start_index ; //最外层循环遍历字符串 while(i < s.size()){ int l = i , r = i ; //先确定有无重复的字符 while(r < s.size() - 1 && s[r + 1] == s[r] ) ++r ; //while(l > 0 && s[l - 1] == s[l] ) --l ; //往左右进行扩展 while(l > 0 && r < s.size() - 1 && s[l - 1] == s[r + 1]){ --l ; ++r ; } //记录下区间长度和起始坐标 if( (r - l + 1) > max_len){ max_len = r - l + 1 ; start_index = l ; } ++i ; } return s.substr(start_index , max_len) ; }};
运行结果:
算法分析:
最外层一个while循环,内部两个循环其实是一个过程,最坏情况是内部两个循环又遍历一遍字符串,所以总体时间复杂度为O(n²)。
- 5. Longest Palindromic Substring (Medium)
- 5. Longest Palindromic Substring Medium
- Leetcode 5. Longest Palindromic Substring (Medium) (cpp)
- (Leetcode)5. Longest Palindromic Substring(medium)
- Longest Palindromic Substring(medium 常考)
- 题解——Leetcode 5. Longest Palindromic Substring 难度:Medium
- [Leetcode 5, Medium] Longest Palindromic Substring
- 【Leetcode】(5)Longest Palindromic Substring(Medium)
- Medium 5题 Longest Palindromic Substring
- Medium 5题 Longest Palindromic Substring
- Longest Palindromic Substring(leetcode medium algorithm problem)
- (算法分析Week6)Longest Palindromic Substring[Medium]
- 5.Longest Palindromic Substring
- 5. Longest Palindromic Substring
- 5. Longest Palindromic Substring
- 5.Longest Palindromic Substring
- 5. Longest Palindromic Substring
- 5.Longest Palindromic Substring
- iOS 对本地图片的压缩
- css3知识点(2)
- 单例设计模式
- 【排序二】选择排序(选择排序&&堆排序)
- Android 蓝牙通信的开发与应用
- 5. Longest Palindromic Substring (Medium)
- 简单的Android.mk 文件
- Kubernetes 学习笔记1
- Linux系统调用
- 调试优化代码方法
- spring配置文件详解
- ERP项目案例:澳科利辊业科技有限公司
- mas_makeConstraint约束和autolayout
- 视频开发学习--ffmpeg