leetcode Longest Palindromic Substring 005

本文介绍了一种高效算法来找到给定字符串中的最长回文子串。通过预处理和动态规划技巧,该方法能够在较短时间内解决问题,并适用于最大长度为1000的字符串。文章详细展示了算法的实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.

Subscribe to see which companies asked this question

class Solution {
public:
    string longestPalindrome(string s) {
        string str="#";
			for (int i = 0; i < s.length(); ++i)
			{
				str+=s[i];
				str+='#';
			}
			
			vector<int> vec(str.length(), 1);
			int right = 0, index = 0, maxl=0, maxi=0;

			for(int i = 0; i < str.length(); i++) {
				if(i < right) {

					if(i+vec[2*index-i]-1 < right) {
						vec[i] = vec[2*index-i];
					} else {
						vec[i] = right-i+1;

						for (int r=right+1, l=i-vec[i]; l >= 0 && r < str.length(); l--, r++) {
							if(str[l]!=str[r]) break;
							vec[i]+=1;
						}

						if(i+vec[i]-1 >= right) {
							index = i;
							right = i+vec[i]-1;
						}
					}
				} else {
					for(int l = i-1, r=i+1; l >= 0 && r < str.length(); l--, r++) {
						if(str[l] != str[r]) break;
						vec[i]+=1;
					}
					if(i+vec[i]-1 >= right) {
						index = i;
						right = i+vec[i]-1;
					}
				}

				if(vec[i] > maxl) {
					maxl = vec[i];
					maxi = i;
				}
			}

			string ans="", tmp="";
			
			if(str[maxi] != '#')
				tmp += str[maxi];

			for (int i = 1; i < vec[maxi]; ++i)
			{
				if(str[maxi+i] == '#') continue;
				ans += str[maxi+i];
			}
			
			string rans = ans;
			reverse(rans.begin(), rans.end());

			if(tmp == "") {
				return rans+ans;
			} else {
				return rans+tmp+ans;
			}
    }
};




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值