給定一個(gè)字符串,判斷其是否為一個(gè)回文串。只包含字母和數(shù)字,忽略大小寫(xiě)。
注意事項(xiàng)
你是否考慮過(guò),字符串有可能是空字符串?這是面試過(guò)程中,面試官常常會(huì)問(wèn)的問(wèn)題。
在這個(gè)題目中,我們將空字符串判定為有效回文。
您在真實(shí)的面試中是否遇到過(guò)這個(gè)題?
Yes
樣例
"A man, a plan, a canal: Panama" 是一個(gè)回文。
"race a car" 不是一個(gè)回文。
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){
//若不是有效的字符
//那么往后移動(dòng)
i++;
if(i>=s.length()){
return true;
//這段代碼是后來(lái)加的,因?yàn)闇y(cè)試的時(shí)候,會(huì)給一個(gè)【,.】,
//這樣的也算是回文串,所以就加上了這一行代碼
}
}
while(isvalid_char(s[j])==0||j>=s.length()){
//
j--;
if(j>=s.length()){
return true;
//這段代碼是后來(lái)加的,因?yàn)闇y(cè)試的時(shí)候,會(huì)給一個(gè)【,.】,
//這樣的也算是回文串,所以就加上了這一行代碼
}
}
//都轉(zhuǎn)化位小寫(xiě)的字符來(lái)比較
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;
}
};