方法一:使用栈的性质。将字符串的一半放入栈,再利用栈的先进后出的性质,来判断另一半字符串和栈中的元素是否相等。
代码如下:
/*解密回文*/
#include <stdio.h>
#include <string.h>
int main()
{
char a[105],s[105];
int i,len,mid,next,top;
gets(a);//
len = strlen(a);//
mid = len/2 - 1;//
top = 0;//栈的初始化
for(i = 0;i <= mid;i++)
{
s[++top] = a[i];
}
if(len%2==0)
{
next=mid+1;
}
else
{
next = mid+2;
}
for(i = next;i <= len-1;i++)
{
if(a[i]!=s[top])
{
break;
}
top--;
}
if(top==0)
{
printf("YES");
}
else
{
printf("NO");
}
return 0;
}
方法二:利用递归的思想,也是从两头向中间开始比较。
代码如下:
#include <stdio.h>
#include <string.h>
int fun(int low, int high, char *str, int length)
{
if (length == 0 || length == 1)
return 1;
if (str[low] != str[high])
return 0;
return fun(low+1, high-1, str, length-2);
}
int main()
{
char str[105];
gets(str);
int length = strlen(str);
if(fun(0, length-1, str, length))
{
printf("YES");
}
else
{
printf("NO");
}
return 0;
}