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.
自己的方法,一个一个字符的判断(要注意边界条件)
class Solution {
public boolean detectCapitalUse(String word) {
if(word == null || word.length() == 0) return false;
if(word.length() == 1) return true;
boolean flag = (word.charAt(0) >= 'A' && word.charAt(0) <= 'Z') ? true : false;
if(flag){
boolean upper = (word.charAt(1) >= 'A' && word.charAt(1) <= 'Z' && flag) ? true : false;
for(int i = 1; i < word.length(); i++){
if(upper && word.charAt(i) >= 'a' && word.charAt(i) <= 'z') return false;
if(!upper && word.charAt(i) >= 'A' && word.charAt(i) <= 'Z') return false;
}
}else{
for(int i = 1; i < word.length(); i++){
if(word.charAt(i) >= 'A' && word.charAt(i) <= 'Z') return false;
}
}
return true;
}
}
如 mL, FFFFFFFFFFFFf
别人的方法:直接调用线程的方法
public boolean detectCapitalUse(String word) {
return word.equals(word.toUpperCase()) ||
word.equals(word.toLowerCase()) ||
Character.isUpperCase(word.charAt(0)) &&
word.substring(1).equals(word.substring(1).toLowerCase());
}
A slightly more verbose, but more efficient solution:
public boolean detectCapitalUse(String word) {
int numUpper = 0;
for (int i=0;i<word.length();i++)
if (Character.isUpperCase(word.charAt(i))) numUpper++;
if (numUpper == 1) return Character.isUpperCase(word.charAt(0));
return numUpper == 0 || numUpper == word.length();
}