We define the usage of capitals in a word to be right when one of the following cases holds:

  • All letters in this word are capitals, like "USA".
  • All letters in this word are not capitals, like "leetcode".
  • Only the first letter in this word is capital, like "Google".

Given a string word, return true if the usage of capitals in it is right.

Example 1:

Input: word = “USA” Output: true

Example 2:

Input: word = “FlaG” Output: false

Constraints:

  • 1 <= word.length <= 100
  • word consists of lowercase and uppercase English letters.

Code

class Solution {
public:
    bool detectCapitalUse(string word) {
 
        if(!isupper(word[0])) {
            for(int i = 0; i < word.size(); i++) {
                if(isupper(word[i])) return false;
            }
        } else {
            if(word.size() >= 2) {
                bool capital = false;
                if(isupper(word[1])) capital = true;
                for(int i = 2; i < word.size(); i++) {
                    if(!isupper(word[i]) && capital) return false;
                    if(isupper(word[i]) && !capital) return false;
                }
            }
        }
 
        return true;
        
    }
};

將邏輯寫的更精簡,可以只分成兩個 case,第一個 case 是當開頭為小寫時,後面一定只能是小寫,第二個 case 是當開頭為大寫時,則後面一定要都是小寫或者大寫。

class Solution {
public:
    bool detectCapitalUse(string word) {
        for(int i = 1; i < word.size(); i++){
            if(isupper(word[1]) != isupper(word[i]) || 
            islower(word[0]) && isupper(word[i])) return false;
        }        
        return true;
    }
};