判斷字符串是否為回文。只考慮字母數字字符,忽略大小寫。非字母數字字符跳過。
例:"A man, a plan, a canal: Panama" → true
"race a car" → false
左右指針向中間移動,跳過非法字符,比較合法字符(忽略大小寫)。
class Solution {
public:
bool isPalindrome(string s) {
int l = 0, r = s.size() - 1;
while (l < r) {
while (l < r && !isalnum(s[l])) ++l;
while (l < r && !isalnum(s[r])) --r;
if (l < r) {
if (tolower(s[l]) != tolower(s[r])) return false;
++l; --r;
}
}
return true;
}
};
C++ 標準庫不直接支持 Unicode 字符分類。需用 ICU 庫或手動判斷字符範圍(如中文字符不在 ASCII 字母數字範圍內)。
此題是雙指針處理字符串「有效字符過濾 + 比較」的標準模式,代碼極簡但邊界條件需謹慎處理。