【LeetCode】最长回文子串-中心扩展法
2024-09-04 16:45:51
【问题】给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 :
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 :
输入: "cbbd"
输出: "bb"
【思路】判断一个字符串是不是回文字符串,一个很简单的思路就是从中间向两边依次展开判断对应位置是否相等,但题目是让求最长回文子串,那么我们遍历所有的字符,以每个字符为中心向两边拓展,就ok了,但是存在两种情况:
"aba", 这种情况我们可以从中心一直向两边拓展,从而使回文子串
"abba", 这种情况我们如果直接使用从中心拓展判断,就会出现错误,因此需要从两个相邻的数出发,同时向两边拓展,而不是仅仅从一个中心位置出发
因此我们在遍历时,对于每个字符,都要考虑上面两种情况!
PalindromeCore(s, i, i);
PalindromeCore(s, i, i+1);
注意:Coding时注意i, j的位置,正确计算好最大长度!
class Solution {
private:
int left = , maxlen = ;
public:
void PalindromeCore(string s, int i, int j){
while(i >= && j < s.length() && s[i] == s[j]){
i--; j++;
}
if(maxlen < j-i-){
left = i+; // 由于上面跳出循环i自减了,j自加了
maxlen = j-i-;
}
} string longestPalindrome(string s) {
if(s.length() < ){
return s;
}
for(int i = ;i < s.length(); i++){
PalindromeCore(s, i, i);
PalindromeCore(s, i, i+);
}
return s.substr(left, maxlen);
// substr实质从left位置开始数maxlen个字符构成的子串
} };
最新文章
- .NET环境下基于RBAC的访问控制
- 开源共享一个训练好的中文词向量(语料是维基百科的内容,大概1G多一点)
- 45个非常有用的oracle语句(摘自尚学堂)
- iOS 中关闭键盘方法
- 后台action处理数据传递给前台界面
- 【leetcode边做边学】二分查找应用
- 串String(1):串的实现(定长顺序存储结构)
- Django中不返回QuerySets的API -- Django从入门到精通系列教程
- Flask 系列之 Blueprint
- yum安装的mysql5.7默认密码
- pycharm注册码(不断更新)
- xlrd(excel导入mysql数据库)
- Json字符串转DataTable
- np.split()和np.array_split()
- IIS无法启动,应用程序池自动关闭
- 用DLL实现插件的简单演示
- git自己用得着的命令
- MySQL中的xtrabackup的原理解析
- nginx location 正则匹配
- Linux读书笔记第一周