题目

从标准输入读入一个字符串,判断该字符串是否为回文字符串(即正向读和反向读完全相同的字符串)。

输入格式:一行输入一个不含空白字符的字符串。

输出格式:若为回文字符串输出 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