日新计划Leetcode之520. 检测大写字母

108 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第25天,点击查看活动详情

一、题目描述:

520. 检测大写字母 - 力扣(LeetCode)

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

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

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

 

示例 1:

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

示例 2:

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

提示:

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

二、思路分析:

分析题目,要求对输入的非空单词判断其大写使用是否正确。
首先,根据首字母可以将单词分为两大类讨论:首字母大写和首字母小写,用变量temp记录

  1. 若首字母是小写字母,则后面的字母都要小写,不能出现大写字母,否则返回false;
  2. 若首字母是大写字母,则后面的字母要均是大写或均是小写,后面的字母与前一个字母同时为大写/小写,否则不符合规则,返回false。

三、AC 代码:

bool detectCapitalUse(char * word){
    int i = 1,temp = 0;
    //A= 65, a = 97
    if(word[0] >= 97){//若第一个字母是小写,则temp=1
        temp = 1;
    }
    if(temp == 0){//首字母大写
        if(word[i] == '\0'){//如果只有一个字母,则直接返回true
            return true;
        }
        i++;
        for(; word[i] != '\0'; i++){//判断前一个字母和后一个字母是不是均为小写字母/大写字母
            if((word[i] >= 97 && word[i-1] < 97) || (word[i] < 97 && word[i-1] >= 97)){
                return false;
            }
        }
    }else{//首字母小写
        for(; word[i] != '\0'; i++){
            if(word[i] < 97){//出现大写字母则返回false
                return false;
            }
        }
    }
    return true;
}

参考

记录大写字母个数,以及第一个字母是否大写,最后简单判断即可 - 检测大写字母 - 力扣(LeetCode)

ts正则表达式求解(算作弊吗QAQ) - 检测大写字母 - 力扣(LeetCode)