String:125. Valid Palindrome

来源:互联网 发布:手机看高清网络电视 编辑:程序博客网 时间:2024/06/06 19:23

    我申请了一个vector来挑出字母和数字,并且在放入vector之前就全部转换成小写字母。

    然后再遍历一遍vector,设前后两个指针往中间推。

class Solution {public:    bool isPalindrome(string s) {        vector<char> ss;        for(int i = 0; i < s.size(); ++i)        {            if(isalnum(s[i]))            {                ss.push_back(tolower(s[i]));            }        }        int start = 0;        int end = ss.size() - 1;        if(end == -1)            return true;        while(start < end)        {            if(ss[start] != ss[end])                return false;            else            {                start++;                end--;            }        }        return true;    }};
    tolower(s[i]) 函数很好用,不用这个函数的话,大写字母-相应的小写字母= 32.附一张ASCII转换表:


但是!但是!不能abs(s[left] - s[right]) != 32这样判断,因为比如‘0’和‘P’就差了32,但是如果又加上判断两个字符是否都是字母又太太太麻烦了。所以判断两个字符是不是同一个字母应该这样写:
 

class Solution {public:    bool isPalindrome(string s) {        int left = 0, right = s.size() - 1 ;        while (left < right) {            if(!isalnum(s[left]))                left++;            else if(!isalnum(s[right]))                right--;            else if((s[left] + 32 - 'a') % 32 != (s[right] + 32 - 'a') % 32)                return false;            else            {                left++;                right--;            }        }        return true;    }


原创粉丝点击