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访问。

相关推荐
左手の明天31 分钟前
SLIP 协议封装与解析详解:原理、C 代码与实战案例
linux·c语言·开发语言·c++
nhdh35 分钟前
B+树揭秘:MySQL索引核心原理全解析
数据结构·b树·mysql
海上小飞龙1 小时前
【KMP算法-下篇】同一道题:Java 库函数 2600 微秒,手写 KMP 16 微秒
java·开发语言·算法
青少儿编程课堂1 小时前
后缀自动机解析:本质不同子串与最长重复片段统计
c++·python·算法·bfs·信息学竞赛
朝朝辞暮i1 小时前
C++ 第 12 课:局部变量、作用域、变量生命周期
开发语言·c++·算法
乐迪信息2 小时前
港口船舶逆行怎么管?AI防爆摄像机搭载智能检测算法
大数据·人工智能·深度学习·算法·计算机视觉
无名猿3 小时前
shared_ptr 完全指南:引用计数、控制块与开销
c++·性能优化·内存管理·标准库·现代c++
Sirens.3 小时前
Java并发锁详解:六类锁策略与 synchronized 底层原理
java·前端·算法
和裕4 小时前
全纸结构重型纸箱能否满足 1 吨以上设备出口熏蒸豁免要求?通关合规性全解析
大数据·运维·网络·人工智能·算法