题干:
给定一个单词,你需要判断单词的大写使用是否正确。
我们定义,在以下情况时,单词的大写用法是正确的:
全部字母都是大写,比如"USA"。
单词中所有字母都不是大写,比如"leetcode"。
如果单词不只含有一个字母,只有首字母大写, 比如 "Google"。
否则,我们定义这个单词没有正确使用大写字母。
示例 1:
输入: "USA"
输出: True
示例 2:
输入: "FlaG"
输出: False
注意: 输入是由大写和小写拉丁字母组成的非空单词。
解题思路:
因为ASCII码,大写字母在前,小写字母在后。小写字母的a为ASCII码的97位,所以拿出每位的char值和97进行比较,小于97为大写。
比较分为几种情况:
(1)当字符串长度为1的时候,返回结果永远为true;
(2)当字符串长度为2的时候,只有第一位是小写,第二位是大写,才是false,其他情况下都是true;
(3)当字符串长度大于等于3的时候,第一位是小写,则需要判断后面值是否都是小写。第一位是大写,第二位是大写,则后面所有位都应该为大写。第一位是大写,第二位是小写,则后面所有位都应该为小写。
package easy;
/**
* 给定一个单词,你需要判断单词的大写使用是否正确。
* 我们定义,在以下情况时,单词的大写用法是正确的:
* 全部字母都是大写,比如"USA"。
* 单词中所有字母都不是大写,比如"leetcode"。
* 如果单词不只含有一个字母,只有首字母大写, 比如 "Google"。
* 否则,我们定义这个单词没有正确使用大写字母。
*
* @author kimtian
* @date 2021.05.20
* @num 520
**/
public class DetectCapitalUseSolution {
/**
* 测试
*
* @param args
*/
public static void main(String[] args) {
System.out.println(detectCapitalUse("AbcA"));
}
/**
* (1)当字符串长度为1的时候,返回结果永远为true;
* (2)当字符串长度为2的时候,只有第一位是小写,第二位是大写,才是false,其他情况下都是true;
* (3)当字符串长度大于等于3的时候,第一位是小写,则需要判断后面值是否都是小写。第一位是大写,第二位是大写,则后面所有位都应该为大写。第一位是大写,第二位是小写,则后面所有位都应该为小写。
*
* @param word word
* @return
*/
public static boolean detectCapitalUse(String word) {
char[] aaa = word.toCharArray();
if (aaa.length <= 1) {
return true;
}
boolean isHighOne = aaa[0] < 97;
boolean isHighTwo = aaa[1] < 97;
if (!isHighOne && isHighTwo) {
return false;
}
for (int i = 2; i < aaa.length; i++) {
if ((!isHighOne && aaa[i] < 97) || (isHighOne && isHighTwo && aaa[i] >= 97) ||
(isHighOne && !isHighTwo && aaa[i] < 97)) {
return false;
}
}
return true;
}
}