520. Detect Capital
1. Description
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:
- 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”. Otherwise, we define that this word doesn’t use capitals in a right way.
2. Example
Example 1:
Input: “USA”
Output: True
Example 2:
Input: “FlaG”
Output: False
3. Note
- The input will be a non-empty word consisting of uppercase and lowercase latin letters.
4. Solutions
My Accepted Solution
n = i_word.size()
Time complexity: O(n)
Space complexity: O(1)
class Solution
{
private:
bool isLetterLower(char letter)
{
return ('a' <= letter && letter <= 'z');
}
public:
bool detectCapitalUse(string &i_word)
{
if(i_word.size() == 1) return true;
// no matter which case, all letters after the first one should be upper or lower
bool isLaterLettersLower = isLetterLower(i_word[1]);
for(int i = 1; i < i_word.size(); i++)
{
if(isLetterLower(i_word[i]) != isLaterLettersLower)
return false;
}
// if later letters are lower, the string must be valid
// if later letters are upper, the first one should be upper as well
return (isLaterLettersLower || (!isLaterLettersLower && !isLetterLower(i_word.front())));
}
};