要判断一个字符序列是否为回文,可以使用栈作为辅助结构来实现。
算法思路如下:
- 创建一个空栈。
- 遍历字符序列,将每个字符依次入栈。
- 再次遍历字符序列,将每个字符与栈顶元素进行比较。
- 如果相同,则继续比较下一个字符。
- 如果不同,说明字符序列不是回文,返回 false。
- 如果遍历完整个字符序列,且栈为空,则说明字符序列是回文,返回 true;否则,返回 false。
以下是使用 C 语言实现的示例代码:
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#define MAX_LEN 100
bool isPalindrome(char s[]) {
int len = strlen(s);
char stk[MAX_LEN];
int top = -1;
// 将字符序列的每个字符入栈
for (int i = 0; i < len; i++) {
stk[++top] = s[i];
}
// 将字符序列的每个字符与栈顶元素比较
for (int i = 0; i < len; i++) {
if (s[i] != stk[top--]) {
return false; // 不是回文
}
}
return true; // 是回文
}
int main() {
char s[MAX_LEN];
printf("请输入字符序列:");
scanf("%s", s);
if (isPalindrome(s)) {
printf("是回文\n");
} else {
printf("不是回文\n");
}
return 0;
}
示例运行结果:
请输入字符序列:abcdedcba
是回文
请输入字符序列:hello
不是回文