题目
算法面试题汇总 - LeetBook - 力扣(LeetCode)全球极客挚爱的技术成长平台
验证回文串
解析
方法一:利用额外空间保存转化后的结果
- tolower() 将字符传化成小写
- isalnum() 判断字符是否是字母或数字
class Solution {
public:
bool isPalindrome(string s) {
string shandled;//用来存储转化后的字符与小写字母
for(auto c:s){
if(isalnum(c)){
shandled+=tolower(c);
}
}
//逐一对比
int i=0,j=shandled.size()-1;
while(i<j){
if(shandled[i]!=shandled[j])return false;
i+=1;
j-=1;
}
return true;
}
};
方法二:在原字符串上比较
每次先找到left和right满足要求的字符(英文字母与数字),并转化成小写进行比较
class Solution {
public:
bool isPalindrome(string s) {
int stringSize = s.size();
int left = 0;
int right = stringSize - 1;
while (left < right)
{
while (left < right && !isalnum(s[left]))
{
left++;
}
while (left < right && !isalnum(s[right]))
{
right--;
}
if (tolower(s[left]) != tolower(s[right]))
return false;
left++;
right--;
}
return true;
}
};