1. 程式人生 > >51nod 1088 最長迴文子串

51nod 1088 最長迴文子串

題目

解題思路:用暴力的方式,定義兩個標記i,j,i從字串的左邊開始往右指,j從字串的右邊開始往左指。取中間的字串儲存到另一個字元陣列中,每儲存完一個字串,則進行迴文字串的判斷。

迴文字串的判斷如下:

從字串的開頭遍歷到字串的一半,判斷前半部分和後半部分的字元是否相同,若相同,則為迴文字串。

將每個迴文字串的長度記錄下來。最後得到最大回文字串的長度。

原始碼附上:

#include <iostream>
#include <cstring>
using namespace std;


int judge(char str2[])
{
	int i;
	int len=strlen(str2);
	for(i=0;i<len/2;i++)
	{
		if(str2[i]!=str2[len-i-1])
		{
			return -1;
		}
	}
	return 0;
}

int main()
{
	char str1[1001];
	memset(str1,0,sizeof(str1));
	cin>>str1;
	int length=strlen(str1);
	int i,j,k,num,max=0,temp;
	for(i=0;i<length;i++)
	{
		for(j=length-1;j>i;j--)
		{
			num=0;
			char str2[1001];
			memset(str2,0,sizeof(str2));
			for(k=i;k<=j;k++)
			{
				str2[num++]=str1[k];
			}
			if(judge(str2)==0)
			{
				temp=strlen(str2);
				if(temp>max)
				{
					max=temp;
				}
			}
		}
	}
	cout<<max<<endl;
	return 0;
}