【力扣】验证回文串
目录
题目描述
解答(c语言)
题目描述
如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。
字母和数字都属于字母数字字符。
给你一个字符串 s
,如果它是 回文串 ,返回 true
;否则,返回 false
。
解答(c语言)
int isDigitLetter(char x)
{
if ('a' <= x && x <= 'z') {
return 1;
}
if ('A' <= x && x <= 'Z') {
return 2;
}
if ('0' <= x && x <= '9') {
return 3;
}
return 0;
}
bool isPalindrome(char* s)
{
size_t len = strlen(s);
if (len <= 1) {
return true;
}
size_t left = 0;
size_t right = len - 1;
while (left < right) {
// 将left移到字母数字字符
int num1 = isDigitLetter(s[left]);
if (num1 == 0) {
left++;
continue;
}
// 先将right移到字母数字字符
int num2 = isDigitLetter(s[right]);
if (num2 == 0) {
right--;
continue;
}
// 判断是否相等
if ((num1 == num2) && (s[left] == s[right])) {
left++;
right--;
} else if ((num1 == 1) && (num2 == 2) && (s[left] - 'a' == s[right] - 'A')) {
left++;
right--;
} else if ((num1 == 2) && (num2 == 1) && (s[left] - 'A' == s[right] - 'a')) {
left++;
right--;
} else {
return false;
}
}
return true;
}