给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:
输入: "race a car"
输出: false
链接:https://leetcode-cn.com/problems/valid-palindrome
思路:
第一步,去掉无效字符串,将大写字母转化为小写字母,原地算法。
第二步,回文验证,采用双指针。
bool isPalindrome(char * s){
int i, j;
for(i = 0, j = 0; s[i] != '\0'; i++) {
if(s[i] >= 'A' && s[i] <= 'Z') {
s[j++] = s[i] - 'A' + 'a';
} else if (s[i] >= 'a' && s[i] <= 'z') {
s[j++] = s[i];
} else if(s[i] >= '0' && s[i] <= '9') {
s[j++] = s[i];
}
}
s[j] = '\0';
j--;
for(i = 0; i < j; i++, j--) {
if(s[i] != s[j]) {
return false;
}
}
return true;
}