JZX轻语:简

LeetCode 520 - 检测大写字母

发表于2024年06月23日

#字符串

比较简单的题目,但看了下以前的做法比较复杂。其实最简单的做法是先统计大写字母的个数,然后判断是否全大写(大写字母个数为字符串长度)或者全小写(大写字母个数为0),或者只有首字母大写(大写字母个数为1,且是首字母大写)。

class Solution:
    def detectCapitalUse(self, word: str) -> bool:
        capital_cnt = 0
        for ch in word:
            capital_cnt += ch.isupper()
        return capital_cnt == len(word) or capital_cnt == 0 or capital_cnt == 1 and word[0].isupper()

以前的做法,其实就是和官解一样的思路:如果字符串长度为1,直接返回True;否则,如果第一个字母为小写,则第二个字母为大写的话就返回False;最后,从第三个字母开始,如果出现和上一个字母大小写不一致的情况,就返回False。最后返回True

class Solution {
public:
    bool detectCapitalUse(string word) {
        if (word.size() <= 1) return true;
        //检查首字母为小写但第二字母为大写的情况
        if (islower(word[0]) && isupper(word[1])) 
            return false;

        //后面的字符串交错检查就可以了
        for (int i = 2; i < word.size(); ++i) {
            if (isupper(word[i])  ^ isupper(word[i - 1])) {
                return false;
            }
        }

        return true;
    }
};

闪念标签:LC

题目链接:https://leetcode.cn/problems/detect-capital/