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 if it has more than one letter, 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.
Thinking Process
- Keep 3 flags firstLetterCapital, canBeCapital, canBeNonCapital
- Scan through the list, whenever a lowercase letter appears canBeCapital = false, whenever more than 1 capitals appear, canBeNonCapital = false
Code
public class Solution {
public boolean detectCapitalUse(String word) {
boolean firstLetterCapital = false;
boolean canBeCapital = true;
boolean canBeNonCapital = true;
for(int i = 0; i < word.length(); i++){
char c = word.charAt(i);
if(c >= 'A' && c <= 'Z'){
if(i == 0)
firstLetterCapital = true;
else if(!firstLetterCapital)
return false;
else if(!canBeCapital)
return false;
else if(canBeCapital)
canBeNonCapital = false;
}else{
canBeCapital = false;
if(!canBeNonCapital)
return false;
}
}
return true;
}
}
Complexity
- Time complexity is O(n) as the string is scanned once