思路:分别从左low和右high开始比较,如果两个位置的char是数字或者字母,则比较是否相同,如果有一方不是数字或者字符就向中间走,直到是字符或数字时,如果比较后发现不同,跳出循环,直接返回false,否则继续执行,直到low和high相遇,此时表示字符串是回文,返回true。
#include<string>
class Solution {
public:
bool ischar(char s)
{
if(s<='z'&&s>='a')
return true;
if(s<='9'&&s>='0')
return true;
else return false;
}
bool isPalindrome(string s) {
string str = s;
transform(str.begin(),str.end(),str.begin(),::tolower);
int length = str.length();
int low =0,high = length-1;
while(low <=high)
{
while(!ischar(str[low])&&low<=high)
{
low ++;
}
while(!ischar(str[high])&&low<=high)
{
high--;
}
if(low>high)break;
if(str[low]==str[high])
{
low++;
high--;
}
else
{
return false;
}
}
return true;
}
};