题意
给一个单词,判断这个单词是正确与否,
判断规则如下:1、如果字母全是小写合格;2、字母全是小写合格;3、第一个字母大写,其余字母小写合格;其他皆为不合格。
解法如下
方法一:常规解法
思路:先对首字母大小写进行判断,然后再做分支处理
public class Solution1 {
public static boolean detectcaptial(String s) {
char[] ch=s.toCharArray();
//当首字母大写时
if(ch[0]<='Z') {
boolean hasUpper=false;
boolean hasLow=false;
for(int i=1;i<ch.length;i++) {
if(ch[i]<='Z')hasUpper=true;
if(ch[i]>='a')hasLow=true;
}
if(hasUpper&&hasLow)return false; //首字母大写情况下,只有大小写混杂是false,所以优先处理它,可减少分支。
else return true;
}
//首字母小写时
else {
for(int c:ch) {
if(c<='Z') //首字母小写的情况下,只有全部字母小写才true,优先处理,理由同上。
return false;
}
}
return true;
}
Runtime: 29 ms
方法二:
将字符串分别转化成大小写后进行比较
先将整个字符串分别转化成大小写,如果与原word一致,则符合全部大写或全部小写的规则,所以合格。
其他情况,不论首字母是大写还是小写,要使其合格,其余字母必须都得是小写。
public class Solution2{
public boolean detectCaptial(String s) {
String s_Upper=s.toUpperCase();
String s_Low=s.toLowerCase();
if(s.equals(s_Upper)||s.equals(s_Low))
return true;
else {
String s_Sub=s.substring(1,s.length());
if(s_Sub==s_Sub.toLowerCase())return true;
}
return false;
}
Runtime: 40 ms
方法三:通过比较大写字母个数与单词字母个数进行判断***
public class Solution3 {
public boolean detectCaptial(String s) {
char[] ch=s.toCharArray();
int cnt=0;
int n=ch.length;
for(char c:ch) {
if('Z'-c>=0)cnt++;
}
if(cnt==n||cnt==0)return true;//全部小写或者全部大写
else if(cnt==1&&('Z'-ch[0])>=0)return true;//只有首字母大写
else return false;
//return ((cnt==0 || cnt==word.length()) || (cnt==1 && 'Z' - word.charAt(0)>=0));
}
}
“`
Runtime: 29 ms