给定一个字符串,确定它是否是回文,只考虑字母数字字符和忽略大小写。

来源:互联网 发布:iphone4s支持4g网络吗 编辑:程序博客网 时间:2024/05/28 06:07

本题源自LeetCode

-----------------------------------------------------------------------

先将字符串全部转换为小写字符, 从两端扫描字符串。

暴力解决:

    bool isPalindrome(string s) {        if(s.length()==0)            return true;        transform(s.begin(), s.end(), s.begin(), ::tolower);        int start=0;        int end=s.length()-1;        while(start<end){            if(IsChar(s[start])&&IsChar(s[end])){                if(s[start]!=s[end])                    return false;                start++;                end--;            }else if(!IsChar(s[start])&&IsChar(s[end])){                start++;            }else if(IsChar(s[start])&&!IsChar(s[end])){                end--;            }else{                start++;                end--;            }        }        return true;    }    bool IsChar(char s){        if((s>='a'&&s<='z')||(s>='0'&&s<='9'))            return true;        return false;    }

2  利用快排的思想 从两端扫描,不是字符和数字的直接跳过

    bool isPalindrome(string s) {        if(s.length()==0)            return true;        transform(s.begin(), s.end(), s.begin(), ::tolower);        int start=0;        int end=s.length()-1;        while(start<end){            while(start<end&&!IsCharOrNumber(s[start]))                start++;            while(start<end&&!IsCharOrNumber(s[end]))                end--;            if(start<end && s[start]!= s[end])                return false;            start++;            end--;                        }        return true;    }    bool IsCharOrNumber(char s){        if((s>='a'&&s<='z')||(s>='0'&&s<='9'))            return true;        return false;    }



阅读全文
0 0