检测大写字母
原题
我们定义,在以下情况时,单词的大写用法是正确的:
- 全部字母都是大写,比如
"USA"
。 - 单词中所有字母都不是大写,比如
"leetcode"
。 - 如果单词不只含有一个字母,只有首字母大写, 比如
"Google"
。
给你一个字符串 word
。如果大写用法正确,返回 true
;否则,返回 false
。
示例 1:
输入:word = "USA"
输出:true
示例 2:
输入:word = "FlaG"
输出:false
提示:
1 <= word.length <= 100
word
由小写和大写英文字母组成
class Solution {
public boolean detectCapitalUse(String word) {
}
}
解题思路
通过统计并分类讨论大小写字母个数来判断单词的大写用法是否正确,详见代码。
代码示例
class Solution {
public boolean detectCapitalUse(String word) {
// 将字符串转换成字符数组
char arr[] = word.toCharArray();
int length = word.length();
// 保存大写字母和小写字母个数
int countUpperCase = 0;
int countLowerCase = 0;
// 统计大小写字母个数
for (char ch : arr) {
if ((int)ch >= 65 && (int)ch <= 90) countUpperCase += 1;
if ((int)ch >= 97 && (int)ch <= 122) countLowerCase += 1;
}
// 全为大写或全为小写返回 true
if ((countUpperCase != 0 && countLowerCase == 0) || (countUpperCase == 0 && countLowerCase != 0)) return true;
// 第一个字母为大写返回 true
if (countUpperCase == 1 && arr[0] >= 65 && arr[0] <= 90) return true;
return false;
}
}
说明
判断字符是否为大写/小写字母的两种方式
- 使用强制类型转换
(int)
,将字符类型强制转换为整数类型,可以获取到其 ASCII 码值。再进一步判断是否属于特定范围内来确定是否为大/小写字母。- A
65
- Z
90
- a
97
- z
122
- A
- 使用
Character
类的静态方法Character.isLowerCase()
和Character.isLowerCase()
,如if (Character.isUpperCase(ch))
。另外,传递一个非字母字符给该方法,它也会正常返回false
。