Skip to content

0520. Detect Capital

Given a word, you need to judge whether the usage of capitals in it is right or not.

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

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

Otherwise, we define that this word doesn't use capitals in a right way.

Example 1:

Input: "USA"
Output: True

Example 2:

Input: "FlaG"
Output: False

Note: The input will be a non-empty word consisting of uppercase and lowercase latin letters.Analysis

There are two cases (it's actually three but we can merge the first two together) to consider: 1. If first character is upper case, then the rest has to be all upper case or all lower case. 2. If the first character is lower case, then the rest has to be all lower case.

After the observation, we find we essentially just need three variables: allCap: excluding first character, the rest of the substring are all captials. allLower: excluding first character, the rest of the substring are all captials. firstCap: first character is capital.

Note that !allCap is not allLower.

Code

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

Last update: April 1, 2022