题目要求
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:
输入: "race a car"
输出: false
解题思路
1、这道题目要求判断字符串是否为回文串,回文串的意思是这个字符串从头读和从尾读都是一样的(如同摘要一样)。
2、并且题目说明了,空字符也算是有效的回文串,所以等一下我们也要判断字符串是否为空。
3、这里要说明一下NULL 和空字符的区别:
- NULL 表示声明的是一个空对象,可以赋给任何对象。
- 但是空字符是占有一块空字符空间,代表了一个对象实例。
4、我们会用到三个额外函数
- strlen() 用来取出字符串的长度,头文件<string.h>;
- isalnum() 用来判断字符是否为数字或字母,是则返回0,否则返回1;
- tolower() 将字母转换成小写,isalnum() 和tolower() 的头文件都为<ctype.h>
解题过程
- 接收数据之后首先要判断数据合法性
- 判断指向字符是否为字母或数字,是则进行下一个判断。否则循环变量改变,跳过该次判断,进行下一个判断。
- 当头尾指针都是字母或数字时,可以开始对比是否相同。相同则循环变量改变,进行下一个循环。否则返回0(false)并退出循环(代表该字符串不为回文串)
- 如果循环没有退出,全部执行完成。这即代表该字符串为回文串,可以返回1(true)
该代码在力扣编译器提交
bool isPalindrome(char * str){
int i, n;
//1、判断数据合法性
if(str == NULL)
return 0;
else if(strlen(str) == 0)
return 1;
n = strlen(