通过栈来判断一个字符串是否是回文字符串。
输入样例:
abccba
abcba
abcab
0
输出样例:
YES
YES
NO
C
#include <stdio.h>
#include <stdbool.h>
#define MaxSize 100
typedef struct SqStack {
char data[MaxSize];
int top;
} SqStack;
void stackInit(SqStack *stack);
bool stackEmpty(SqStack stack);
bool stackPush(SqStack *stack, char e);
bool stackPop(SqStack *stack, char *x);
bool check(char *str) {
SqStack stack;
int len = 0;
char c;
while (*(str + len) != 0) len++;
stackInit(&stack);
for (int i = 0; i < len; i++) {
stackPush(&stack, str[i]);
}
for (int i = 0; i < len; i++) {
stackPop(&stack, &c);
if (c != str[i]) return false;
}
return true;
}
int main() {
char str[MaxSize] = "";
while (scanf("%[^\n]%*c", str) && !(str[0] == 48 && str[1] == 0)) {
printf("%s\n", check(str) ? "YES" : "NO");
}
return 0;
}
void stackInit(SqStack *stack) {
stack->top = -1;
}
bool stackEmpty(SqStack stack) {
return stack.top == -1 ? true : false;
}
bool stackPush(SqStack *stack, char e) {
if (stack->top == MaxSize - 1) return false;
stack->data[++stack->top] = e;
return true;
}
bool stackPop(SqStack *stack, char *x) {
if (stackEmpty(*stack)) return false;
*x = stack->data[stack->top--];
return true;
}
Java
import java.util.Scanner;
import java.util.Stack;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (true) {
String str = scanner.nextLine();
if (str.equals("0")) break;
System.out.println(check(str) ? "YES" : "NO");
}
}
private static boolean check(String str) {
Stack<Character> stack = new Stack<>();
for (int i = 0; i < str.length(); i++) {
stack.push(str.charAt(i));
}
for (int i = 0; i < str.length(); i++) {
char c = stack.pop();
if (c != str.charAt(i)) return false;
}
return true;
}
}