题目
判断字符串是否为回文
思路
i=0, j=len-1,不等则否;i<j 时同步移动。含空串与单字符视为回文。
解题分析
回文串首尾对称。双指针从两端向中间比较,不等则否;全比完则是。不必真的反转整串,下标 walk 即可,也避免依赖 strlen 库函数。
完整程序
#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其它写法
下面每种写法都是完整程序,输入输出格式与正文一致,便于对照。
先求长度再双指针
与正文相同思路,把求长度单独写清楚,全程不用库函数。
程序:
#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