iven 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.
翻译:
给一个词,你需要判断大写字母在其中的使用是否正确。
当以下情况之一成立时,我们将一个单词中的大写字母的使用定义为正确:
- 这个词中的所有字母都是大写,如“USA”。
- 这个词中的所有字母都不是大写字母,例如“leetcode”。
- 如果它有多个字母,只有这个词中的第一个字母是大写,,如“Google”。
思路:分情况判断,若单词只有一个字符,返回true,否则用三个循环分三种情况来判断,全大写,全小写首位大写。
public boolean detectCapitalUse(String word) {
int len = word.length();
int i =0;
if(len == 1){
return true;
}
/*全小写*/
while(word.charAt(0)-'a'>=0 && i<len){
if(word.charAt(i)-'a'< 0) return false;
i++;
}
/*全大写*/
i=2;
while(word.charAt(0)-'a'<0 && word.charAt(1)-'a' < 0&& i<len){
if(word.charAt(i)-'a'>= 0) return false;
i++;
}
/*首位大写其余小写*/
while(word.charAt(0)-'a'<0 && word.charAt(1)-'a' >= 0 && i<len){
if(len == 2) break;
if(word.charAt(i)-'a'< 0) return false;
i++;
}
return true;
}
答案解法有用匹配模式的,代码如下
public boolean detectCapitalUse(String word) {
return word.matches("[A-Z]+|[a-z]+|[A-Z][a-z]+");
}
或者计算大写字母的个数,代码如下:
public boolean detectCapitalUse(String word) {
int cnt = 0;
for(char c: word.toCharArray()) if('Z' - c >= 0) cnt++;
return ((cnt==0 || cnt==word.length()) || (cnt==1 && 'Z' - word.charAt(0)>=0));
}