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

相关推荐
乐观勇敢坚强的老彭几秒前
信奥C++一维数组笔记
开发语言·c++·笔记
码上有光2 分钟前
异常和智能指针
java·大数据·c++·servlet·异常·智能指针
变量未定义~5 分钟前
最小生成树1(Prim模板)、最小生成树2(kruskal模板)、最近公共祖先(模板)
算法
这就是佬们吗8 分钟前
Python入门⑤-异常处理、文件操作与实战项目
开发语言·数据库·python·算法·pycharm
王维同学14 分钟前
[原创][Windows C++]Explorer Shell 扩展、图标覆盖与 COM 服务器定位
c++·windows·注册表
LONGZETECH16 分钟前
新能源汽车充电设备装配与调试仿真教学软件 技术架构与核心实现解析
大数据·算法·3d·unity·架构·汽车
code_pgf17 分钟前
C++ 工程架构设计规范
c++·机器人
自学小白菜18 分钟前
关于提升机器学习算法做预测回归任务精度的方法分享
算法·机器学习·回归·提升精度
C++ 老炮儿的技术栈23 分钟前
基于MFC+原生GDI手动自绘仪表盘控件
c语言·c++·visual studio·控件·工业控制·gdi·自绘
学废了wuwu26 分钟前
从入门到实战:深入浅出模型压缩三大核心——剪枝、彩票假设与知识蒸馏
人工智能·算法·剪枝