输出最长回文子串(找到最长回文子串,并输出最长回文子串)

将一个很长的字符串分割成一段一段的子串,要求子串都是回文串,有回文串就输出最长的,没有回文串就将字符一个个输出。

思路:和之前找字符串的的最长回文子串其实属于一类问题,还是需要先依次遍历整个字符串,找到字符串的最长回文子串。此时就需要返回最长子串的中心位置即最长回文子串的长度(由于需要返回两个值,在此直接在主函数中实现,并不使用函数调用的方式),然后根据最长回文子串的长度是奇数还是偶数,输出最长回文字串就可以了。

#include <iostream>

using namespace std;

int main( )
{
	int count = 0;
	int max = 0;//最长回文子串的长度
	int max_index = 0;//最长回文子串的中心点位置
	char str[] = "abcdefgh";
	int n = strlen(str);
	cout << "字符串的总长度为:" << n << endl;
	//判断字符串是否为空
	if (str == NULL || n<1)
	{
		return 0;
	}
	for (int i = 0; i < n; i++)
	{
		//字符串为奇数时
		for (int j = 0; (i - j) >= 0 && (i + j)<n; j++)
		{
			if (str[i - j] != str[i + j])
			{
				break;
			}
			count = 2 * j + 1;
		}
		if (count > max)
		{
			max = count;
			max_index = i;
		}
		//字符串为偶数时
		for (int k = 0; (i - k) >= 0 && (i + k + 1) < n; k++)
		{
			if (str[i - k] != str[i + k + 1])
			{
				break;
			}
			count = 2 * k + 2;
		}
		if (count > max)
		{
			max = count;
			max_index = i;
		}
	}
	cout << "最长的回文子串的中心位置:" << max_index << endl;
	cout << "最长的回文子串的长度是:" << max << endl;
	if (max ==1)
	{
		for (int j = 0; j<n; j++)
		{
			cout << str[j]<<" ";
		}
		cout << endl;
	}
	
	if (max % 2 == 1&&max!=1)//最长的回文子串的长度是奇数
	{
		//字符串为奇数时
		for (int j = (max_index - max / 2); j<max; j++)
		{
			cout << str[j];
		}
		cout << endl;
	}
	else
	{
		//字符串为偶数时
		for (int j = (max_index - max / 2 + 1); j<max; j++)
		{ 
			cout << str[j];
		}
		cout << endl;
	}

	return 0;
}




  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值