给定一个字符串,判断其是否为一个回文串。只考虑字母和数字,忽略大小写。
样例
样例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
解释: "amanaplanacanalpanama"
样例 2:
输入: "race a car"
输出: false
解释: "raceacar"
挑战
O(n) 时间复杂度,且不占用额外空间。
注意事项
你是否考虑过,字符串有可能是空字符串?这是面试过程中,面试官常常会问的问题。
在这个题目中,我们将空字符串判定为有效回文。
class Solution {
public:
/**
* @param s: A string
* @return: Whether the string is a valid palindrome
*/
bool isPalindrome(string &s) {
// write your code here
if(s.size()==0) return true;
int len=s.size();
int start=0;
int end=len-1;
for (int i = 0; i < len; i++)
{
if (isupper(s[i])) s[i] = tolower(s[i]);
}
while(start<=end)
{
if(!isalpha(s[start])&&!isdigit(s[start]))
{
start++;
continue;
}
if(!isalpha(s[end])&&!isdigit(s[end]))
{
end--;
continue;
}
if(s[start]!=s[end]) return false;
start++;
end--;
}
return true;
}
};