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

相关推荐
琹箐6 分钟前
最大堆和最小堆 实现思路
java·开发语言·算法
renhongxia135 分钟前
如何基于知识图谱进行故障原因、事故原因推理,需要用到哪些算法
人工智能·深度学习·算法·机器学习·自然语言处理·transformer·知识图谱
坚持就完事了36 分钟前
数据结构之树(Java实现)
java·算法
算法备案代理38 分钟前
大模型备案与算法备案,企业该如何选择?
人工智能·算法·大模型·算法备案
赛姐在努力.1 小时前
【拓扑排序】-- 算法原理讲解,及实现拓扑排序,附赠热门例题
java·算法·图论
我能坚持多久1 小时前
【初阶数据结构01】——顺序表专题
数据结构
rainbow68892 小时前
EffectiveC++入门:四大习惯提升代码质量
c++
秋邱2 小时前
用 Python 写出 C++ 的性能?用CANN中PyPTO 算子开发硬核上手指南
开发语言·c++·python
我在人间贩卖青春2 小时前
C++之析构函数
c++·析构函数
野犬寒鸦2 小时前
从零起步学习并发编程 || 第六章:ReentrantLock与synchronized 的辨析及运用
java·服务器·数据库·后端·学习·算法