Valid Palindrome - LeetCode

题目连接

Valid Palindrome - LeetCode函数

注意点

  • 忽略大小写字母的不一样

解法

解法一:i指向开头,j指向结尾,一块儿向中间移动,遇到大写字母就转成小写字母,遇到非字母就跳过。时间复杂度O(logn)code

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

小结

  • isalnum()是c++自带的用于判断是不是字母的函数
  • (ch+32-'a')%32是统一处理大小写字母的方法,由于小写字母比其对应的大写字母的ASCII码大32,因此若是遇到了大写字母,咱们须要先加上32,而后再减去'a',就知道其相对于'a'的位置了,这个值确定是小于32的,因此对32取余没啥影响。 若是遇到小写字母,虽然加上了32,可是最后对32取余了,多加的32也就没了,因此仍是能获得其相对于'a'的正确位置。
相关文章
相关标签/搜索