OJ lintcode 有效回文串

给定一个字符串,判断其是否为一个回文串。只包含字母和数字,忽略大小写。
注意事项
你是否考虑过,字符串有可能是空字符串?这是面试过程中,面试官常常会问的问题。
在这个题目中,我们将空字符串判定为有效回文。
您在真实的面试中是否遇到过这个题?
Yes
样例
"A man, a plan, a canal: Panama" 是一个回文。
"race a car" 不是一个回文。

class Solution {
public:
    /**
     * @param s A string
     * @return Whether the string is a valid palindrome
     */
    bool isvalid_char(char c){
        if(c>='0'&&c<='9'){
            return true;
        }
        if(c>='A'&&c<='Z'){
            return true;
        }
        if(c>='a'&&c<='z'){
            return true;
        }
        return false;
    }

    bool isPalindrome(string& s) {
        // Write your code here
        if(s[0]==' '){
            return true;
        }
        int len=s.length();
        for(int i=0,j=s.length()-1;i<=j;i++,j--){
            while( isvalid_char(s[i])==0){
                //若不是有效的字符
                //那么往后移动
                i++;
                if(i>=s.length()){
                    return true;
                    //这段代码是后来加的,因为测试的时候,会给一个【,.】,
                    //这样的也算是回文串,所以就加上了这一行代码
                }
            }

            while(isvalid_char(s[j])==0||j>=s.length()){
                //
                j--;
                if(j>=s.length()){
                    return true;
                    //这段代码是后来加的,因为测试的时候,会给一个【,.】,
                    //这样的也算是回文串,所以就加上了这一行代码
                }
            }
            //都转化位小写的字符来比较
            char beg=s[i];
            char end=s[j];
        
            if('A'<=beg&&beg<='Z'){
                beg=beg+32;
            }

            if('A'<=end&&end<='Z'){
                end=end+32;
            }

            //两者都取到了有效的字符
            if(beg!=end){
                //如果不相等 返回faluse ,不是回文串
                return false;
            }
        }
        return true;
    }
};

你可能感兴趣的:(OJ lintcode 有效回文串)