跳至主要內容

520. 检测大写字母


520. 检测大写字母

🟢   🔖  字符串  🔗 力扣open in new window LeetCodeopen in new window

题目

We define the usage of capitals in a word to be right when one of the following cases holds:

  • All letters in this word are capitals, like "USA".
  • All letters in this word are not capitals, like "leetcode".
  • Only the first letter in this word is capital, like "Google".

Given a string word, return true if the usage of capitals in it is right.

Example 1:

Input: word = "USA"

Output: true

Example 2:

Input: word = "FlaG"

Output: false

Constraints:

  • 1 <= word.length <= 100
  • word consists of lowercase and uppercase English letters.

题目大意

我们定义,在以下情况时,单词的大写用法是正确的:

  • 全部字母都是大写,比如 "USA"
  • 单词中所有字母都不是大写,比如 "leetcode"
  • 如果单词不只含有一个字母,只有首字母大写, 比如 "Google"

给你一个字符串 word 。如果大写用法正确,返回 true ;否则,返回 false

示例 1:

输入: word = "USA"

输出: true

示例 2:

输入: word = "FlaG"

输出: false

提示:

  • 1 <= word.length <= 100
  • word 由小写和大写英文字母组成

解题思路

思路一:字符串全等

可以直接检查以下三种情况之一是否成立。如果任意一种成立,则返回 true,否则返回 false

  1. 全部大写: 判断 word 是否等于 word.toUpperCase()
  2. 全部小写: 判断 word 是否等于 word.toLowerCase()
  3. 首字母大写: 判断 word 是否等于 word[0].toUpperCase() 拼接上 word.slice(1).toLowerCase()

复杂度分析

  • 时间复杂度O(n),其中 n 是字符串的长度,每次对字符串操作(toUpperCase, toLowerCase, 或 slice)的时间复杂度为O(n)
  • 空间复杂度O(1),所有操作只使用了固定的变量。

思路二:大写字母数量

  1. 辅助函数判断是否为大写字母

    • 使用 isUpper(char) 函数判断当前字母是否为大写。
    • 大写字母的 ASCII 值范围是 [65, 90],也就是 'A'.charCodeAt()'Z'.charCodeAt()
  2. 统计大写字母的个数

    • 遍历整个单词,逐字符检查是否为大写,并记录大写字母的个数 upperCount
  3. 判断大小写规则

    • 如果 大写字母的个数为 0,说明全部字母都是小写,满足条件。
    • 如果 大写字母的个数等于单词长度,说明全部字母都是大写,满足条件。
    • 如果 大写字母的个数为 1 且第一个字母是大写,说明单词是首字母大写,其余全小写,满足条件。
    • 其他情况返回 false

复杂度分析

  • 时间复杂度O(n),其中 n 是字符串的长度,遍历单词统计大写字母的次数。
  • 空间复杂度O(1),只使用了常量空间的计数器和变量。

代码

字符串全等
/**
 * @param {string} word
 * @return {boolean}
 */
var detectCapitalUse = function (word) {
	// 全部大写 或 全部小写 或 首字母大写
	return (
		word === word.toUpperCase() ||
		word === word.toLowerCase() ||
		word === word[0].toUpperCase() + word.slice(1).toLowerCase()
	);
};

相关题目

题号标题题解标签难度力扣
2129将标题首字母大写[✓]字符串🟢🀄️open in new window 🔗open in new window
3120统计特殊字母的数量 I哈希表 字符串🟢🀄️open in new window 🔗open in new window
3121统计特殊字母的数量 II哈希表 字符串🟠🀄️open in new window 🔗open in new window