蘑菇街笔试题目: 判断一个字符串能否通过添加一个字符变成回文串
相关概念:
“回文串”是一个正读和反读都一样的字符串,比如“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;
}