LeetCode | Valid Palindrome

来源:互联网 发布:国际麻将知乎 编辑:程序博客网 时间:2024/04/28 02:31

题目:

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.


思路:

设置两个指针,一个从左向右,一个从右向左遍历。遇到非字母数字跳过,否则比较两指针的数值是否相等。

代码:

class Solution {public:    bool isPalindrome(string s) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        int i = 0;        int j = s.size()-1;                while(i<j)        {            while(!isAlpha(s[i]))            {                i++;                if(i>=s.size())                {                    break;                }                            };                        while(!isAlpha(s[j]))            {                j--;                if(j<0)                {                    break;                }                            };            if(i<j&&!sameAlpha(s[i++],s[j--]))            {                return false;            }        };                return true;    }        bool isAlpha(char c)    {        if(c - 'a' >= 0 && c - 'a' < 26)        {            return true;        }        else if(c - 'A' >= 0 && c - 'A' < 26)        {            return true;        }        else if(c >= '0' && c <= '9')        {            return true;        }        else        {            return false;        }    }        bool sameAlpha(char c1, char c2)    {        if(c1 == c2)        {            return true;        }        else if(c1 - 'A' == c2 - 'a')        {            return true;        }        else if(c1 - 'a' == c2 - 'A')        {            return true;        }        else        {            return false;        }    }};