
Together for a Shared future
一起向未来



今天带来的题目是《520. 检测大写字母》。

题目描述

我们定义,在以下情况时,单词的大写用法是正确的:
全部字母都是大写,比如 "USA" 。
单词中所有字母都不是大写,比如 "leetcode" 。
如果单词不只含有一个字母,只有首字母大写, 比如 "Google" 。
给你一个字符串 word 。如果大写用法正确,返回 true ;否则,返回 false 。
示例 1 :
输入:word = "USA"
输出:true
示例 2:
输入:word = "FlaG"
输出:false
提示:
1 <= word.length <= 100
word 由小写和大写英文字母组成

遍历法

/**
* 全局遍历法
* 执行用时: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)。
后端技术&架构精华

《源码系列》
《经典书籍》
《Java并发编程实战:第2章 影响线程安全性的原子性和加锁机制》
《Java并发编程实战:第3章 助于线程安全的三剑客:final & volatile & 线程封闭》
《服务端技术栈》
《算法系列》
《设计模式》
《LeetCode题库》
《LeetCode 383:ransomNote(赎金信)》
《LeetCode 1446:Consecutive Characters(连续字符)》
扫描二维码
获取技术干货
后台技术汇

好文!点个好看!
本文介绍了如何在Java中检查字符串中大写字母的正确使用,包括全大写、全小写和首字母大写的情况。提供了两种不同的实现方法,分别具有不同的时间和空间复杂度,并给出了相关算法分析。此外,还分享了相关的后端技术资源,如源码阅读、并发编程、设计模式等。
1288

被折叠的 条评论
为什么被折叠?



