Skip to content

520. 检测大写字母

解题过程

INFO

题目链接 我们定义,在以下情况时,单词的大写用法是正确的: 全部字母都是大写,比如 "USA" 。 单词中所有字母都不是大写,比如 "leetcode" 。 如果单词不只含有一个字母,只有首字母大写, 比如 "Google" 。 给你一个字符串 word 。如果大写用法正确,返回 true ;否则,返回 false

javascript
/**
 * @link https://leetcode.cn/problems/detect-capital/
 * @title 520. 检测大写字母
 * @description 我们定义,在以下情况时,单词的大写用法是正确的:
 * 全部字母都是大写,比如 "USA" 。
 * 单词中所有字母都不是大写,比如 "leetcode" 。
 * 如果单词不只含有一个字母,只有首字母大写, 比如 "Google" 。
 * 给你一个字符串 word 。如果大写用法正确,返回 true ;否则,返回 false
 * @param {string} word
 * @return {boolean}
 */
// 解法一
// 思路:列举判断题目三个条件即可
var detectCapitalUse = function (word) {
  // 全部大写
  const allUpper = word.toUpperCase()
  if (allUpper === word) {
    return true
  }

  // 全部小写
  const allLower = word.toLowerCase()
  if (allLower === word) {
    return true
  }

  // 不止一字母的单词首字母大写,非首字母外小写
  const firstUpper = word.length > 1 && word[0].toUpperCase()
  const otherLower = word.length > 1 && word.slice(1).toLowerCase()
  if (firstUpper === word[0] && otherLower === word.slice(1)) {
    return true
  }

  return false
}

// 解法二
// 思路:针对解法一优化代码,提高执行效果
var detectCapitalUse = function (word) {
  // 全部大写或全部小写
  if (word.toUpperCase() === word ||  word.toLowerCase() === word) {
    return true
  }

  // 不止一字母的单词首字母大写,非首字母外小写
  if (word.length > 1 && word[0].toUpperCase() === word[0] && word.slice(1).toLowerCase() === word.slice(1)) {
    return true
  }

  return false
}

// 解法三
// 思路:使用正则表达式
var detectCapitalUse = function (word) {
  // 注意$末尾匹配符必须加,只匹配首字母是不行的,单词不能只有一个首字母满足条件
  return /^([A-Z]+|[a-z]+|[A-Z][a-z]+)$/.test(word)
}

// const result = detectCapitalUse('USA') // true
const result = detectCapitalUse('FlaG') // false
console.log(result)

解题感受

难度相对比较小,考验字符串 API 掌握程度,如果能想到正则表达式就更好了。第一种解法使用字符串 API 即可,第二种根据第一种解法进行了优化,第三种使用更简洁的做法正则表达式,一行代码可以搞定。其余解法比如使用循环判断也可以,但相对比较复杂一点

参考题解