5. Longest Palindromic Substring

题目:Given a string s, find thelongest palindromic substring in s. You may assume that the maximumlength of s is 1000.

        Example:

        Input:"babad"

        Output:"bab"

        Note:"aba" is also a valid answer.

        Example:

        Input:"cbbd"

        Output:"bb"

class Solution {
public:
    string longestPalindrome(string s) {
        
    }
};

对于找到一个字符串中最长的回文字符串方法如下:

1、 若回文字符串的长度大于等于3,则有:回文字符串中连续三个元素左中右,左边=右边,当找到左边等于右边后,这时左边的索引left_index--,右边的索引right_index++,接着判断索引对应的值,如果相等则继续left_index--,right_index++,然后比较,如果不等,则跳出循环记录此刻的回文字符串的长度,maxlen=right_index-left_index;

2、 若有两个及以上相同字母组成的字符串,这也要考虑,判断是否s[i]==s[i+1],简单的写个while循环;记录max_len数据;

3、 这里有几种情况说明:

        A、如果字符串的长度为1则返回s;

        B、如果字符串为空,则返回-1;

具体程序如下:

string longestPalindrome(string s) {
	if (s.empty()) return "";
	if (s.size() == 1) return s;
	int min_start = 0, max_len = 1;
	for (int i = 0; i < s.size();) {
		if (s.size() - i <= max_len / 2) break;
		int left_index = i, right_index = i;
		//相同字符组成的回文字符串判断
		while (right_index < s.size() - 1 && s[right_index + 1] == s[right_index])
			++right_index; 
		i = right_index + 1;
		
		while (right_index < s.size() - 1 && left_index > 0 && s[right_index + 1] == s[left_index - 1]) 
		{
			// 长度为3及以上的回文字符串的判断
			++right_index; --left_index;
		} 
		int new_len = right_index - left_index + 1;
		if (new_len > max_len) { min_start = left_index; max_len = new_len; }
	}
	return s.substr(min_start, max_len);
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值