给定一个字符串,判断其是否为一个回文串。只包含字母和数字,忽略大小写。
注意事项
你是否考虑过,字符串有可能是空字符串?这是面试过程中,面试官常常会问的问题。
在这个题目中,我们将空字符串判定为有效回文。
您在真实的面试中是否遇到过这个题?
Yes
样例
"A man, a plan, a canal: Panama" 是一个回文。
"race a car" 不是一个回文。
class Solution {
public:
/**
* @param s A string
* @return Whether the string is a valid palindrome
*/
bool isvalid_char(char c){
if(c>='0'&&c<='9'){
return true;
}
if(c>='A'&&c<='Z'){
return true;
}
if(c>='a'&&c<='z'){
return true;
}
return false;
}
bool isPalindrome(string& s) {
// Write your code here
if(s[0]==' '){
return true;
}
int len=s.length();
for(int i=0,j=s.length()-1;i<=j;i++,j--){
while( isvalid_char(s[i])==0){
//若不是有效的字符
//那么往后移动
i++;
if(i>=s.length()){
return true;
//这段代码是后来加的,因为测试的时候,会给一个【,.】,
//这样的也算是回文串,所以就加上了这一行代码
}
}
while(isvalid_char(s[j])==0||j>=s.length()){
//
j--;
if(j>=s.length()){
return true;
//这段代码是后来加的,因为测试的时候,会给一个【,.】,
//这样的也算是回文串,所以就加上了这一行代码
}
}
//都转化位小写的字符来比较
char beg=s[i];
char end=s[j];
if('A'<=beg&&beg<='Z'){
beg=beg+32;
}
if('A'<=end&&end<='Z'){
end=end+32;
}
//两者都取到了有效的字符
if(beg!=end){
//如果不相等 返回faluse ,不是回文串
return false;
}
}
return true;
}
};