LeetCode 520. Detect Capital
problem:
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".
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.
first:
class Solution { public boolean detectCapitalUse(String word) { char[] charArray = word.toCharArray(); if(Character.isLowerCase(charArray[0])){ for(char c : charArray){ if(Character.isUpperCase(c)){ return false; } } return true; } if(Character.isUpperCase(charArray[0])&&Character.isUpperCase(charArray[1])){ for(char c : charArray){ if(Character.isLowerCase(c)){ return false; } } return true; } if(Character.isUpperCase(charArray[0])&&Character.isLowerCase(charArray[1])){ for(int i=2;i<charArray.length;i++){ if(Character.isUpperCase(charArray[i])){ return false; } } return true; } return false; } }
result:
Submission Result: Runtime Error Runtime Error Message: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 at Solution.detectCapitalUse(Solution.java:13) at __DriverSolution__.__helper__(__Driver__.java:4) at __Driver__.main(__Driver__.java:48) Last executed input: "G"
second:
class Solution { public boolean detectCapitalUse(String word) { char[] charArray = word.toCharArray(); if(charArray.length==1){ return true; } if(Character.isLowerCase(charArray[0])){ for(char c : charArray){ if(Character.isUpperCase(c)){ return false; } } return true; } if(Character.isUpperCase(charArray[0])&&Character.isUpperCase(charArray[1])){ for(char c : charArray){ if(Character.isLowerCase(c)){ return false; } } return true; } if(Character.isUpperCase(charArray[0])&&Character.isLowerCase(charArray[1])){ for(int i=2;i<charArray.length;i++){ if(Character.isUpperCase(charArray[i])){ return false; } } return true; } return false; } }
result:
discussion里得票最高的写法:
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)); } }
result:
third try:
class Solution { public boolean detectCapitalUse(String word) { char[] charArray = word.toCharArray(); if(charArray.length==1){ return true; } if(!(0<='Z'-charArray[0])){ for(char c : charArray){ if(0<='Z'-c){ return false; } } return true; } if(0<='Z'-charArray[0]&&0<='Z'-charArray[1]){ for(char c : charArray){ if(!(0<='Z'-c)){ return false; } } return true; } if(0<='Z'-charArray[0]&&!(0<='Z'-charArray[1])){ for(int i=2;i<charArray.length;i++){ if(0<='Z'-charArray[i]){ return false; } } return true; } return false; } }
result:
Conclusion:
可见Character.isUpperCase(char c)方法效率较低。其实现留待后续查看。