题目来源:https://leetcode.com/problems/valid-palindrome/ 原题地址
Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases.
For example,
"A man, a plan, a canal: Panama"
is a palindrome.
"race a car"
is not a palindrome.
Note:
Have you consider that the string might be empty? This is a good question to ask during an interview.
For the purpose of this problem, we define empty string as valid palindrome.
解题思路:本题需要注意的地方
忽略字母大小写,字母数字判断,注意字母中的字母大小写转换(把大写加32全部转化为小写)
要注意空字符串也是回文的,面试经常会问到
考虑使用额外空间情况,可以复制一个数组一个指前一个指后。
下面代码没有占用另外字符串存储,效率要高。
class Solution{
public:
bool isPalindrome(string s){
if (s.size() == 0)
return true; //空字符串 也是回文串
int i = 0, j = s.size() - 1;
while (i < j){
if (!(isVaild(s[i]))){
++i;
}
else if(!(isVaild(s[j]))){
--j;
}
else if (s[i] != s[j]){
return false;
break;
}
else{
i++;
--j;
}
}
return true;
}
private:
bool isVaild(char &c){
if (c >= 'a' && c <= 'z'){
return true;
}
else if (c >= 'A'&&c <= 'Z'){
c = c + 'a' - 'A';
return true;
}
else if (c >= '0'&& c <= '9'){
return true;
}
return false;
}
};
注意:以后写好代码后,必须要去leetcode上验证,样例,不然有些小问题没考虑