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

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

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

#include 

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) 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




你可能感兴趣的:(数据结构与算法)