LeetCode 520. Detect Capital
问题描述
我们定义,在以下情况时,单词的大写用法是正确的:
- 全部字母都是大写,比如
"USA" - 单词中所有字母都不是大写,比如
"leetcode" - 如果单词不只含有一个字母,只有首字母大写,比如
"Google"
给定一个字符串 word,判断其大写使用是否正确。
解题思路
题目的三种合法情况可以归纳为三个独立的判断条件,满足其一即可:
辅助方法设计
isAllUppercase(str):检查字符串中所有字符是否都是大写- 遍历每个字符,如果发现小写字母则返回
false
- 遍历每个字符,如果发现小写字母则返回
isAllLowercase(str):检查字符串中所有字符是否都是小写- 遍历每个字符,如果发现大写字母则返回
false
- 遍历每个字符,如果发现大写字母则返回
isFirstUppercase(str):检查是否首字母大写且其余字母小写- 先检查首字母是否大写
- 如果是,从第二个字符开始遍历,发现大写字母则返回
false - 如果首字母不是大写,直接返回
false
主逻辑
1 | return isAllLowercase(word) || isFirstUppercase(word) || isAllUppercase(word); |
三个条件满足任意一个即返回 true。
举例说明
| 输入 | isAllLowercase | isFirstUppercase | isAllUppercase | 结果 |
|---|---|---|---|---|
"USA" |
false | false | true | true |
"leetcode" |
true | false | false | true |
"Google" |
false | true | false | true |
"FlaG" |
false | false | false | false |
"g" |
true | false | false | true |
"G" |
false | false | true | true |
边界情况
- 单字符单词:
"a"和"A"都算正确 - 空字符串:虽然题目通常会给出非空输入,但需要考虑防御性编程
复杂度分析
- 时间复杂度:O(n),最多遍历字符串三次(实际只需一次,三个条件互斥时可提前返回)。
- 空间复杂度:O(1),没有使用额外数据结构。
代码
1 | package code.J520; |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 𝒞𝒶𝓃𝒶𝓇𝓎!