5. 最长回文子串

最长回文子串

给你一个字符串 s,找到 s 中最长的 回文 子串。

示例 1:

输入:s = "babad"

输出:"bab"

解释:"aba" 同样是符合题意的答案。

示例 2:

输入:s = "cbbd"

输出:"bb"

https://leetcode.cn/problems/longest-palindromic-substring/description/

解题思路:

分为奇数以及偶数

while循环每次从当前点,向两边遍历

如果遍历到 s[left] != s[right] 则结束

所以left 以及 right 不包含

cpp 复制代码
#include <iostream> 
#include <string> 
using namespace std;

pair<int, int> expandFromCenter(string &s,int left ,int right) {
	int n = s.size();
	// 从中间开始 left向左扩展,right向右扩展
	while (left >= 0 && right < n && s[left] == s[right]) {
		left--;
		right++;
	}
	// 返回的结果不包含 left 和 right 指向的位置
	return { left + 1 ,right - 1};
}


string longestPalindrome(string s) {
	int start = 0, end = 0;
	for (int i = 0; i < s.size(); i++)
	{
		// 奇数
		pair<int,int> result1 = expandFromCenter(s, i, i);
		int l1 = result1.first;
		int r1 = result1.second;

		// 偶数
		pair<int, int> result2 = expandFromCenter(s, i, i + 1);
		int l2 = result2.first;
		int r2 = result2.second;

		if(r1 - l1 > end - start) {
			start = l1;
			end = r1;
		}

		if (r2 - l2 > end - start) {
			start = l2;
			end = r2;
		}
	}
	return s.substr(start, end - start + 1);
}
int main() {
	string s = "babad";
	cout << longestPalindrome(s) << endl;
}

pair<int,int>的使用

pair将一对值(T1和T2)组合成一个值

这一对值可以具有不同的数据类型(T1和T2),

两个值可以分别用pair的两个公有函数first和second访问

相关推荐
ouliten3 小时前
石子合并模型
c++·算法
补三补四3 小时前
XGBoost(eXtreme Gradient Boosting)算法的核心原理与底层实现技术
算法·集成学习·boosting
多打代码3 小时前
2026.1.2 删除二叉搜索树中的节点
开发语言·python·算法
渡我白衣3 小时前
计算机组成原理(12):并行进位加法器
网络协议·tcp/ip·算法·信息与通信·tcpdump·计组·数电
mu_guang_3 小时前
算法图解3-递归
算法
散峰而望3 小时前
【算法竞赛】C++入门(三)、C++输入输出初级 -- 习题篇
c语言·开发语言·数据结构·c++·算法·github
jianfeng_zhu3 小时前
二叉排序树的建立和插入
算法
不会c嘎嘎3 小时前
数据结构 -- 常见的八大排序算法
数据结构·c++·算法·排序算法·面试题·快速排序
REDcker3 小时前
C++ 崩溃堆栈捕获库详解
linux·开发语言·c++·tcp/ip·架构·崩溃·堆栈