5. 最长回文子串

最长回文子串

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

示例 1:

输入:s = "babad"

输出:"bab"

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

示例 2:

输入:s = "cbbd"

输出:"bb"

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

解题思路:

分为奇数以及偶数

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

如果遍历到 sleft != sright 则结束

所以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访问

相关推荐
shirsl7 小时前
算法 Day1-数组 / 哈希 + 双指针
python·算法·哈希算法
David猪大卫14 小时前
【C++修炼】智能指针使用及原理
开发语言·c++·经验分享·笔记·学习·考研·面试
2601_9677607814 小时前
2026年PDF压缩与页码添加工具技术实测:性能、算法与本地化适配深度对比
算法·pdf
零衣贰14 小时前
The 2026 ICPC Asia East Continent Online Contest (I) 题解
c++·icpc
不会就选b15 小时前
算法日常・每日刷题--<贪心>7
数据结构·算法·leetcode
moonrailgun16 小时前
用 Node.js 复刻 Codex Astra 的终端星光
前端·javascript·算法
fpcc16 小时前
c++编程实践—统一初始化
服务器·c++
罗西的思考16 小时前
[Agent Memory / 强化学习] MemPO源码学习笔记 ---(1)--- 总体
人工智能·算法·机器学习
Zenova EdgeOS17 小时前
C++ 工业边缘 libcurl HTTP 客户端实战
开发语言·c++·网络协议·边缘计算
lvwangshu17 小时前
图论:LCA、树的直径、树的重心、二分图与 Tarjan 缩点
算法·图论