问题描述
问题链接:https://leetcode.com/problems/single-number/#/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.
我的代码
思路很简单,我就直接上代码了
public class Solution {
public boolean detectCapitalUse(String word) {
/*
思路是首先把word转成全小写,然后跟它自己比较。如果相同返回TRUE
首先把word转成全大写,然后跟它自己比较。如果相同返回TRUE
到这里,word的长度肯定大于1,从第2个字母起取它的substring,如果全是小写返回TRUE
返回False
*/
String lower = word.toLowerCase();
if(lower.equals(word)){
return true;
}
String upper = word.toUpperCase();
if(upper.equals(word)){
return true;
}
String str = word.substring(1);
return str.equals(str.toLowerCase());
}
}
打败了54.23%的Java代码。
讨论区
Java 1-Liner
链接地址:https://discuss.leetcode.com/topic/79930/java-1-liner
用了正则表达式,看来我要抽时间好好学学正则表达式了。
Regex again.
public boolean detectCapitalUse(String word) {
return word.matches("[A-Z]+|[a-z]+|[A-Z][a-z]+");
}
3 Lines
链接地址:https://discuss.leetcode.com/topic/79912/3-lines
这个思路也是满新颖的。
public class Solution {
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));
}
}