1. 程式人生 > >判斷一個字串能否通過新增一個字元變成迴文串

判斷一個字串能否通過新增一個字元變成迴文串

蘑菇街筆試題目: 判斷一個字串能否通過新增一個字元變成迴文串

相關概念:

迴文串”是一個正讀和反讀都一樣的字串,比如“level”或者“noon”等等就是迴文串。

迴文可分為兩種:偶數迴文和奇數迴文,偶數迴文中間兩個字元相同,奇數迴文中間只有一個字元;

題目可以分為三種情況:

(1)原字串即為迴文串,直接在中間新增和中間字元相同的字元即可;

(2)缺少一個字元,找出缺少位置;

(2)缺少多個字元,無法通過新增一個字元改造為迴文字元;

#include<stdio.h>
#include<iostream>
#include<string>
using namespace std;

int main()
{
	char str[30];
	gets(str);
	int len=strlen(str);
	int i=0,j=len-1;
	int countdif=0;

	while(i<j)
	{
		if(str[i]==str[j])		//首尾相向比較
		{
			i++;
			j--;
		}
		else
		{
			if(str[i+1]==str[j]||str[i]==str[j-1])	//判斷是否為缺失位
			{
				str[i+1]==str[j] ? i++:	j-- ;
				countdif++;
			}
			else
			{
				countdif=2;
				break;
			}

		}
	}

	switch(countdif)
	{
	case 0:
		cout<<"本來就是迴文字串"<<endl;break;
	case 1:
		cout<<"可以改造為迴文子串"<<endl;break;
	default:
		cout<<"不可以改造為迴文子串"<<endl;break;
	}

	return 0;
}