From:(BJFU242)BJFUOJ
描述
回文序列是正反读均相同的字符序列,如“abba”和“abdba”均是回文,但是“good”不是回文。请设计一个算法判定给定的字符序列是否为回文。
输入
多组数据,每组数据有一行。每一行为一个长度不定的字符序列A。当A为“0”时,输入结束。
输出
对于每组数据输出一行。若字符序列A是回文序列,则输出“YES”,否则输出“NO”。
输入样例 1
abba abdba good 0
输出样例 1
YES YES NO
1.Java实现:
import java.util.Scanner;
public class Main {
private static final int MAX = 1000;
static class Stack{
char[] data;
int top;
int maxsize;
Stack(int maxsize){
this.maxsize = maxsize;
data = new char[maxsize];
top = 0;
}
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s;
Stack st = new Stack(MAX);
while(true) {
s = in.next();
if(s.charAt(0) == '0')
break;
st.top = 0;
for(int i = 0 ; i < s.length() ; i ++) {
st.data[st.top ++] = s.charAt(i);
}
int index = st.top - 1;
for(int i = 0 ; i < s.length() ; i ++) {
if(s.charAt(i)!= st.data[index --])
break;
}
if(index == -1)
System.out.println("YES");
else
System.out.println("NO");
}
}
}
2.C
#include<stdio.h>
#include<stdlib.h>
#define max 1000
//基于栈的回文字符序列判断(BJFU242)
typedef struct node
{
char *top;
char *base;
int maxsize;
} Stack;
int main(){
int i;
char s[100];
Stack st;
st.base=(char *)malloc(max*sizeof(int));
while (1)
{
scanf("%s",s);
if(s[0] =='0')
break;
st.top = st.base;
for ( i = 0; s[i] !='\0'; i++)//空字符(Null),这个对应的就是 '\0'
{
*st.top = s[i];
st.top++;
}
for ( i = 0; s[i] !='\0'; i++)
{
if(s[i] != *(--st.top))
break;
}
if(s[i] == '\0')
printf("YES\n");
else
printf("NO\n");
}
return 0;
}