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 即可,第二种根据第一种解法进行了优化,第三种使用更简洁的做法正则表达式,一行代码可以搞定。其余解法比如使用循环判断也可以,但相对比较复杂一点