classSolution: defdetectCapitalUse(self, word: str) -> bool: # return word.isupper() or word.islower() or word.istitle() ck1 = ck2 = ck3 = True for i, ch inenumerate(word): if ch.islower(): ck1 = False if i == 0: ck3 = False else: ck2 = False if i > 0: ck3 = False return ck1 or ck2 or ck3
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
classSolution { public: booldetectCapitalUse(string word){ bool ck1 = true, ck2 = true, ck3 = true; for (int i = 0; i < word.size(); i++) { if (islower(word[i])) { ck1 = false; if (i == 0) ck3 = false; } else { ck2 = false; if (i > 0) ck3 = false; } } return ck1 || ck2 || ck3; } };
方法二:統計大寫字母的出現次數
但上述方法很不簡潔,因此可以轉換思路,統計大寫字母的出現次數,然後判斷是否符合條件。
如果大寫字母的出現次數為 0,則符合條件 1。
如果大寫字母的出現次數等於字串長度,則符合條件 2。
如果大寫字母的出現次數為 1,且第一個字母為大寫,則符合條件 3。
複雜度分析
時間複雜度:O(n)
空間複雜度:O(1)
1 2 3 4
classSolution: defdetectCapitalUse(self, word: str) -> bool: cnt = sum(ch.isupper() for ch in word) return cnt == 0or cnt == len(word) or cnt == 1and word[0].isupper()