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'的正確位置。
相關文章
相關標籤/搜索