【刷题笔记】520. 检测大写字母

146 阅读1分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第17天,点击查看活动详情

一、题目描述:

520. 检测大写字母

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

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

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

示例 1:

输入:word = "USA"
输出:true

示例 2:

输入:word = "FlaG"
输出:false

提示:

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

二、思路分析:

  • 长度为1,不管大写小写都对,返回true
  • 长度大于等于2
    • 首字母小写,判断后面所有的字母都小写则为true
    • 首字母大写
      • 第二个字母大写,后面的都为大写则为true
      • 第二个字母小写,后面的都小写则为true

三、AC 代码:

class Solution {
public:
    bool detectCapitalUse(string word) {
        char c = word[0];
        int len = word.length();

        if (len == 1) {
            return true;
        }

        // 首字母大写
        if(c >= 'A' && c <= 'Z') {

            // 长度大于2
            bool isBig = false;
            if (word[1] >= 'A' && word[1] <= 'Z') {
                isBig = true;
            }
        
            // 第二个z字母也大写
            if (isBig) {
                for (int i = 2; i < len; i++) {
                    // 判断后面的字符是否落在大写字母区间,不在返回flase
                    if (word[i] >= 'A' && word[i] <= 'Z') {
                        continue;
                    } else {
                        return false;
                    }
                }
                return true;
            } else {
                for (int i = 2; i < len; i++) {
                    // 判断后面的字符是否落在小写字母区间,不在返回flase
                    if (word[i] >= 'a' && word[i] <= 'z') {
                        continue;
                    } else {
                        return false;
                    }
                }
                return true;
            }
            
        }

        if(c >= 'a' && c <= 'z') {
            for (int i = 1; i < len; i++) {
                if (word[i] >= 'a' && word[i] <= 'z') {
                    continue;
                } else {
                    return false;
                }
            }
            return true;
        }
        return true;
    }
};

范文参考:

[Python/Java/JavaScript/Go] 简单状态机 or 统计 or 倒序 - 检测大写字母 - 力扣(LeetCode)

当一个人的眼里只有AC的时候,便只顾兵来将挡水来土掩,被自己菜笑了蛤蛤蛤 - 检测大写字母 - 力扣(LeetCode)

【墨鳌】【C++】【自动机理论:有限状态自动机】 - 检测大写字母 - 力扣(LeetCode)