一、编程题
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将字符串定义为有效的回文串
示例1:
输入:‘A man,a pla, a canal:Panama"
输出:true
解释:“amanaplanacanalpana ma"是回文串
示例2:
输入:“race a car"
输出:false
解释:"raceacar"不是回文串
提示:
1<=s.length<=2*105
字符串s由ASCII字符组成
请作答:
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
bool isPalindrome(string s) {
int left = 0;
int right = s.length() - 1;
while (left < right) {
// 跳过非字母和数字的字符
while (left < right && !isalnum(s[left])) {
left++;
}
while (left < right && !isalnum(s[right])) {
right--;
}
// 转换为小写进行比较
char leftChar = tolower(s[left]);
char rightChar = tolower(s[right]);
if (leftChar != rightChar) {
return false;
}
left++;
right--;
}
return true;
}
int main() {
string s1 = "A man,a plan,a canal:Panama";
string s2 = "race a car";
cout << isPalindrome(s1) << endl; // 输出: true
cout << isPalindrome(s2) << endl; // 输出: false
return 0;
}
这道题的考点主要集中在以下两个方面:
- <