题目描述
【leetcode】125. 验证回文串( Valid Palindrome )
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
第一次解答
思路:
获取字符串左右值,若为字母和数字则比较(忽略大小写)
若不是目标字符,继续往中间获取
ps:看了题解发现,判断一个字符是否是字母或者小数,以及转换字母为小写,都有对应库函数:
int isalnum ( int c )
:头文件\<ctype\>
,检查一个字符是不是字母或数字(alphanumeric)。int tolower(int c);
:头文件\<ctype\>
,将一个字符转换为小写字符。
注意:
s.size() == 0
test case:
“A man, a plan, a canal: Panama”
“race a car”
class Solution {
public:
// 判断是否是字母或者小数
bool is_alphanumeric(char ch){
if('0' <= ch && ch <= '9'){
return true;
}
else if('a' <= ch && ch <= 'z'){
return true;
}
else if('A' <= ch && ch <= 'Z'){
return true;
}
else{
return false;
}
}
// 如果是大写字符,转换为小写
char lower_case(char &ch){
if('A' <= ch && ch <= 'Z')
return 'a' - 'A' + ch;
else
return ch;
}
bool isPalindrome(string s) {
if(s.size() == 0){
return true;
}
int left = 0;
int right = s.size()-1;
while(left <= right){
// 如果不是目标字符,继续朝中间寻找
if(!is_alphanumeric(s[left])){
++left;
continue;
}
if(!is_alphanumeric(s[right])){
--right;
continue;
}
char left_char = lower_case(s[left]);
char right_char = lower_case(s[right]);
if(left_char != right_char)
return false;
++left;
--right;
}
return true;
}
};
结果: