🌲一) 题目要求
描述
要求编写函数,判断给定的一串字符是否为“回文”。所谓“回文”是指顺读和倒读都一样的字符串。如“XYZYX”和“xyzzyx”都是回文。
函数接口定义
bool palindrome( char *s );
函数palindrome判断输入字符串char *s是否为回文。若是则返回true,否则返回false
裁判测试程序样例
#include <stdio.h> #include <string.h> #define MAXN 20 typedef enum {false, true} bool; bool palindrome( char *s ); int main() { char s[MAXN]; scanf("%s", s); if ( palindrome(s)==true ) printf("Yes\n"); else printf("No\n"); printf("%s\n", s); return 0; } /* 你的代码将被嵌在这里 */
🌲二) 题解
🌍
返回值是true / false →布尔类型(bool)
思路:
①将字符串从两端依次比较,每比较一个字符,左端的向右移动一个字符,右端的向左移动一个字符。
⭐显然用while循环,每循环依次,左++,右- -
②只要遇到一对字符不相同,就返回false,因此可以一开始int flag = 1,如果存在一对字符不相同,flag = 0。最后再根据flag,return true / false
bool palindrome( char *s ) { int len = strlen(s); int left = 0,right = len-1; int flag = 1; while(left<right) { if(s[left] != s[right]) flag = 0; left++; right--; } if(flag) return true; else return false; }
🏔优化
其实也不需要像上面的代码这么麻烦,最后还需要再判断一次,
当 s[left] != s[right] 的时候,直接return false。在循环外部return true(显然当字符串为“回文”的时候 if判断的条件不满足,出了循环return true 即可)
代码如下:
bool palindrome( char *s ) { int len = strlen(s); int left = 0,right = len-1; while(left<right) { if(s[left] != s[right]) return false; left++; right--; } return true; }