给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
整体思路还是清晰的,就是两头指针不断比较,并跳过无效的字符;
就是跳过时的判断需要思考下,漏写了可不好;
bool isPalindrome(char* s) {
if(s==NULL){
return true;
}
int r = strlen(s) - 1;
int l = 0;
while (l <= r) {
while ((l<=r)&&!((s[l] >= 48 && s[l] <= 57) || (s[l] >= 65 && s[l] <= 90) || (s[l] >= 97 && s[l] <= 122))) {
l++;
}
while ((l<=r)&&!((s[r] >= 48 && s[r] <= 57) || (s[r] >= 65 && s[r] <= 90) || (s[r] >= 97 && s[r] <= 122))) {
r--;
}
if (l >= r) {
return true;
}
if (s[l] <= 90) {
s[l] += 32;
}
if (s[r] <= 90) {
s[r] += 32;
}
if (s[l] != s[r] && l <= r) {
return false;
}
l++;
r--;
}
return true;
}
完整代码已放入github中,在2022_3_18文件夹中,需要测试可修改调用参数:
GitHub - frankRenlf/c_dailyWorkhttps://github.com/frankRenlf/c_dailyWork.git
这个结果显示还是比较不稳定的....