判断回文串

Posted petewell

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了判断回文串相关的知识,希望对你有一定的参考价值。

问题描述

输入一串字符串,判断是否是回文串。
输入

一行字符串,长度不超过255。

输出

如果是回文串,输出“YES”,否则输出“NO”。

eg:

输入:

12321

输出:

YES

思路

回文串就是正着反着读都一样,所有只需要遍历下字符串的前一半,看和后一半对应位置的字符是不是都一样。如果出现不一样的,就不是回文串。
如果前一半的所有字符 str[i] 都和后一半对应位置的字符 str[length - 1 - i] 相等,那就是回文串了、

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
#include <string.h>
int judge(char str[])
{
int length = strlen(str), i;
for(i = 0; i < length/2; i++)
{
if(str[i] != str[length - 1 - i])
{
return 0;
}
}
return 1;
}
int main()
{
char str[256];
while(gets(str))
{
int answer = judge(str);
if(answer == 1)
{
printf("YESn");
}
else{
printf("NOn");
}
}
return 0;
}

point

  • 一开始想着遍历所有字符,再反着遍历一遍,两遍的结果作比较。最后发现有点蠢。

  • 一个愚蠢的错误:其实 version1 的代码是这样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <string.h>
int main()
{
char str[256];
gets(str);
int length = strlen(str), i;
for(i = 0; i < length/2; i++)
{
if(str[i] != str[length - 1 -i])
{
printf("NOn");
}
else
{
printf("YESn");
}
}
return 0;
}

于是输入一个 “123421”,输出就成了:

技术图片

此处有一个扶额哭的表情……..

原文:大专栏  判断回文串


以上是关于判断回文串的主要内容,如果未能解决你的问题,请参考以下文章

最长回文字串暴力

判断回文串

字符串处理算法回文判断的算法设计及C代码实现

判断回文串

用递归判断字符串是不是为回文串(C语言) 用递归判断字符串是不是为回文串(C语言)

判断回文串