Together for a Shared future
一起向未来
今天带来的题目是《520. 检测大写字母》。
题目描述
我们定义,在以下情况时,单词的大写用法是正确的:
全部字母都是大写,比如 "USA" 。
单词中所有字母都不是大写,比如 "leetcode" 。
如果单词不只含有一个字母,只有首字母大写, 比如 "Google" 。
给你一个字符串 word 。如果大写用法正确,返回 true ;否则,返回 false 。
示例 1 :
输入:word = "USA"
输出:true
示例 2:
输入:word = "FlaG"
输出:false
提示:
遍历法
/**
* 全局遍历法
* 执行用时:1 ms , 在所有 Java 提交中击败了 83.20% 的用户*
* 内存消耗:39.6 MB , 在所有 Java 提交中击败了 14.23% 的用户
* @param word
* @return
*/
public static boolean detectCapitalUse(String word) {
int upperCount = 0;
int lowerCount = 0;
for (int i = 0; i < word.length(); i++) {
if (65 <= word.charAt(i) && word.charAt(i) <= 90) {
upperCount++;
} else {
lowerCount++;
}
}
return ((65 <= word.charAt(0) && word.charAt(0) <= 90) && upperCount == 1 && lowerCount == (word.length() - 1))
|| (upperCount == word.length())
|| (lowerCount == word.length())
;
}
public static boolean detectCapitalUseV2(String word) {
// 若第 1 个字母为小写,则需额外判断第 2 个字母是否为小写
if (word.length() >= 2 && Character.isLowerCase(word.charAt(0)) && Character.isUpperCase(word.charAt(1))) {
return false;
}
// 无论第 1 个字母是否大写,其他字母必须与第 2 个字母的大小写相同
for (int i = 2; i < word.length(); ++i) {
if (Character.isLowerCase(word.charAt(i)) ^ Character.isLowerCase(word.charAt(1))) {
return false;
}
}
return true;
}
复杂度分析
1)时间复杂度:O(n),其中 n 为字符串的长度。我们需要遍历字符串中的每个字符。
2)空间复杂度:O(1)。