文章目录
- 力扣题目
- 代码
力扣题目
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。
字母和数字都属于字母数字字符。
给你一个字符串 s,如果它是 回文串 ,返回 true ;否则,返回 false 。
示例 1:
输入: s = “A man, a plan, a canal: Panama”
输出:true
解释:“amanaplanacanalpanama” 是回文串。
示例 2:
输入:s = “race a car”
输出:false
解释:“raceacar” 不是回文串。
示例 3:
输入:s = " "
输出:true
解释:在移除非字母数字字符之后,s 是一个空字符串 “” 。
由于空字符串正着反着读都一样,所以是回文串。
代码
思路分析:
1.写一个函数my_isDigPha判断字符是否是字母数字,如果大写需要转换为小写;
2.设置一前一后2个指针,跳过非字母数字的字符,然后对比2个字符是否相同,如果存在不相同的那就不是回文串。
int my_isDigPha(char *s)
{if((*s >= 'A' && *s <= 'Z') || (*s >= 'a' && *s <= 'z') || (*s >= '0' && *s <= '9')){if(*s >= 'A' && *s <= 'Z'){*s += 32;}return 1;}else{return 0;}
}bool isPalindrome(char* s)
{int i = 0;int j = strlen(s) - 1;while(i <= j){/*跳过非字母数字字符*/if((my_isDigPha(&s[i]) != 0) && (my_isDigPha(&s[j]) != 0)){if(s[i] != s[j]){return false;}i++;j--;}else{if(my_isDigPha(&s[i]) == 0){i++;}if(my_isDigPha(&s[j]) == 0){j--;}}}return true;
}