题目
从标准输入读入一个字符串,判断该字符串是否为回文字符串(即正向读和反向读完全相同的字符串)。
输入格式:一行输入一个不含空白字符的字符串。
输出格式:若为回文字符串输出 yes,否则输出 no,末尾换行。
数据范围与约定:字符串长度不超过 1000。
思路与算法
1. 双指针碰撞检测
获取字符串长度 len,设置左指针 i = 0,右指针 j = len - 1。
2. 相向收缩比对
循环条件 i < j:若发现 s[i] != s[j] 则立即判定非回文退出;若指针相遇均完全一致,则为回文字符串。
完整程序
#include <stdio.h>
int main(void)
{
char s[500];
if (scanf("%499s", s) != 1) {
return 1;
}
// 先计算字符串长度
int len = 0;
while (s[len]) {
len++;
}
// 双指针从两端向中间夹逼,一旦对称字符不匹配立即判定失败
int i = 0, j = len - 1;
while (i < j) {
if (s[i] != s[j]) {
printf("no\n");
return 0;
}
i++;
j--;
}
printf("yes\n");
return 0;
}运行示例
输入:
level输出:
yes