题目地址: 520. 检测大写字母
题目内容:
我们定义,在以下情况时,单词的大写用法是正确的:
全部字母都是大写,比如"USA" 。
单词中所有字母都不是大写,比如"leetcode" 。
如果单词不只含有一个字母,只有首字母大写,比如"Google"。
给你一个字符串word。如果大写用法正确,返回true;否则,返回false 。
示例 1:
输入:word = "USA"
输出:true
示例 2:
输入:word = "FlaG"
输出:false
提示:
1 <= word.length <= 100
word由小写和大写英文字母组成
思路:
使用正则表达式实现
代码实现:
/**
* @param {string} word
* @return {boolean}
*/
var detectCapitalUse = function(word) {
return /^(([A-Z]+)|([a-z]+)|([A-Z]{1}[a-z]+))$/.test(word)
};
思路:
遍历字符串,获取
大写字母的索引和个数
,根据题目描述,符合下面条件中的一个就返回true
1、大写字母的个数等于字符串长度,也就是
字母全部大写
2、大写字母的个数为0,大写字母的索引为设置的初始值,也就是
字母全部小写
3、大写字母的个数为1,并且大写字母的索引为0,也就是
首字母大写
:::tip
- 每个字符(包括字母)在计算机中都有一个对应的
ASCII码值
。 大写字母
的ASCII码
值范围是65到90(包括65和90)
小写字母
的ASCII码
值范围是97到122(包括97和122)
。
// 判断字母是否是大写字母
function isLetterUppercase(letter) {
const ascii = letter.charCodeAt(0);
return ascii >= 65 && ascii <= 90;
}
// 判断字母是否是小写字母
function isLetterLowercase(letter) {
const ascii = letter.charCodeAt(0);
return ascii >= 97 && ascii <= 122;
}
:::
代码实现:
/**
* @param {string} word
* @return {boolean}
*/
var detectCapitalUse = function(word) {
// 判断字母是大写字母
function isLetterUppercase(letter) {
const ascii = letter.charCodeAt(0);
return ascii >= 65 && ascii <= 90;
}
const len = word.length
let upperStrCount = 0, upperSreIndex = -1
for(let i = 0; i < len; i++) {
if(isLetterUppercase(word[i])) {
upperStrCount++
upperSreIndex = i
}
}
return upperStrCount === len || (upperStrCount === 0 && upperSreIndex === -1) || (upperStrCount === 1 && upperSreIndex === 0)
};