leetcode之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.
题意
给定一个字符串,判断它是不是一个字符串?
注释:
1、空字符串是回文字符串;
2、大小写不影响判断;
3、只考虑字符串中数字、字母、字符;
解题思路
典型面试题,判断是否是回文字符串,只需要两个指针,一个从头开始,一个从尾开始,但是这里需要注意两点,一个是需要跳过非数字字母字符的元素,二是不区分大小写;
则这里需要将整个字符串先全部小写化,然后再当遇到非法元素时,跳过既可;
PS:这里判断字符是否合法可以使用方法isalnum来实现。
C++实现代码
class Solution {
public:
bool isPalindrome(string s) {
int i,j;
for(i=0,j=s.length()-1;i<j;i++,j--){
while(i<j && !isalnum(s[i])) ++i;
while(i<j && !isalnum(s[j])) --j;
if(i<j && tolower(s[i]) != tolower(s[j]))
return false;
}
return true;
}
};