试解leetcode算法题--最长回文子串

<题目表述>

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例 1:

输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案。

<原题链接>

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

<思路>

本题初步思路是可以采用一个游标r和两个判断回文串的下标p和q,每次p向左移动q向右移动,然后比较s[p]和s[q]的值,直到不相等时退出,并将q-p+1与已知最长回文串长相比,再决定是否更新最长长度。

<样例代码>

class Solution {
public:
	string longestPalindrome(string s) {
		int p = 0, 
        	q = p + 1 , 
        	sSize = s.length() - 1;
		int r = p; 
        int arr[2] = { 0,0 };	//记录最长回文串起始下标位置。
		int sum1 = 0;
		if (s.length() <= 1)
			return s;
		//偶数情况(abba)
		while (r < sSize)
		{
			while (p > 0 && q < sSize && s[p - 1] == s[q + 1] && s[p] == s[q])
			{
				p--;
				q++;
			}
			if (s[p]==s[q] && q - p + 1 > sum1)
			{
				sum1 = q - p + 1;	//更新最长回文串长度
				arr[0] = p;
			}
			r++;
			p = r;
			q = p + 1;
		}
		//奇数情况(aba)
		int sum2 = 0;
		p = q = 0; r = p;	//起始pq位置相同
		while (r < sSize)
		{
			while (p > 0 && q < sSize && s[p - 1] == s[q + 1])
			{
				p--;
				q++;
			}
			if (s[p]==s[q] && q - p + 1 > sum2)
			{
				sum2 = q - p + 1;	//更新长度,同上
				arr[1] = p;
			}
			r++;
			p = q = r;
		}
		if (sum1 > sum2)
			return s.substr(arr[0], sum1);
		else
			return s.substr(arr[1], sum2);
	}
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值