520. 检测大写字母

news2025/1/17 13:58:42

题目

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

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

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

示例 1:

输入:word = “USA”
输出:true

示例 2:

输入:word = “FlaG”
输出:false

提示:

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

代码

完整代码

#include <stdbool.h>
#include <string.h>
#include <stdio.h>

bool isBig(char c) {
    return (c >= 'A' && c <= 'Z');
}

bool isSmall(char c) {
    return (c >= 'a' && c <= 'z');
}

bool detectCapitalUse(char* word) {
    bool isBeginBig = isBig(word[0]);
    bool mix = false;
    for (int i = 1; i < strlen(word); i++) {
        if (isBeginBig) {
            if (!mix && isSmall(word[i])) {
                if (i != 1) { // 不是第二个开始就是小写
                    return false;
                }
                mix = true;
            }
            if (mix) {
                if (isBig(word[i])) { // 有小写且非首字母有大写
                    return false;
                }
            }
        } else {
            if (isBig(word[i])) { // 非首字母有大写
                return false;
            }
        }
    }
    return true;
}

// int main(void)
// {
//     printf("a = %d",'a');
//     printf("A = %d",'A');
// }

思路分析

这套代码用了模拟的方法。

  • 首先,判断第一个字母是否是大写字母。
  • 遍历整个字符串,检查是否符合所有大写或所有小写的规则。
  • 如果第一个字母是大写,则后续字符可以全为小写或全为大写。
  • 如果第一个字母是小写,则后续字符必须全为小写。
  • 在遍历过程中,如果发现任何不符合上述规则的情况,则返回 false,否则返回 true

拆解分析

  1. isBig函数
bool isBig(char c) {
    return (c >= 'A' && c <= 'Z');
}

判断字符是否为大写字母。

  1. isSmall函数
bool isSmall(char c) {
    return (c >= 'a' && c <= 'z');
}

判断字符是否为小写字母。

  1. detectCapitalUse函数
bool detectCapitalUse(char* word) {
    bool isBeginBig = isBig(word[0]);
    bool mix = false;
    for (int i = 1; i < strlen(word); i++) {
        if (isBeginBig) {
            if (!mix && isSmall(word[i])) {
                if (i != 1) { // 不是第二个开始就是小写
                    return false;
                }
                mix = true;
            }
            if (mix) {
                if (isBig(word[i])) { // 有小写且非首字母有大写
                    return false;
                }
            }
        } else {
            if (isBig(word[i])) { // 非首字母有大写
                return false;
            }
        }
    }
    return true;
}

主要函数,遍历字符串,判断是否符合大写规则。

复杂度分析

  • 时间复杂度:O(n),其中 n 为字符串的长度,需要遍历每个字符。
  • 空间复杂度:O(1),不需要额外的空间,仅使用了几个额外变量。

一题多解

正则表达式解法

完整代码

#include <stdbool.h>
#include <regex.h>

bool detectCapitalUse(char* word) {
    regex_t regex;
    int reti;

    // 编译正则表达式
    reti = regcomp(&regex, "^[A-Z]+$|^[a-z]+$|^[A-Z][a-z]+$", REG_EXTENDED);
    if (reti) {
        return false; // 如果正则表达式编译失败,返回 false
    }

    // 执行正则表达式
    reti = regexec(&regex, word, 0, NULL, 0);
    regfree(&regex);

    if (!reti) {
        return true; // 如果正则表达式匹配,返回 true
    } else if (reti == REG_NOMATCH) {
        return false; // 如果正则表达式不匹配,返回 false
    } else {
        return false; // 如果正则执行中发生其他错误,返回 false
    }
}


思路分析

这套代码用了正则表达式的方法。

  • 使用正则表达式来匹配符合大写规则的字符串。
  • 正则表达式 ^[A-Z]+$|^[a-z]+$|^[A-Z][a-z]+$ 分别匹配全部大写、全部小写和首字母大写的情况。

拆解分析

  1. 编译正则表达式
// 编译正则表达式
reti = regcomp(&regex, "^[A-Z]+$|^[a-z]+$|^[A-Z][a-z]+$", REG_EXTENDED);
if (reti) {
    return false; // 如果正则表达式编译失败,返回 false
}

编译用于匹配大写规则的正则表达式。

  1. 执行正则表达式

// 执行正则表达式
reti = regexec(&regex, word, 0, NULL, 0);
regfree(&regex);

if (!reti) {
    return true; // 如果正则表达式匹配,返回 true
} else if (reti == REG_NOMATCH) {
    return false; // 如果正则表达式不匹配,返回 false
} else {
    return false; // 如果正则执行中发生其他错误,返回 false
}

执行正则表达式,并根据匹配结果返回对应的布尔值。

复杂度分析

  • 时间复杂度:O(n),其中 n 为字符串的长度,正则表达式匹配需要遍历每个字符。
  • 空间复杂度:O(1),不需要额外的空间。

结果

模拟:

模拟

正则:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1853397.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

React学习(二)——状态(数据)与状态修改

useState 在React中&#xff0c;useState 是一个非常重要的Hook&#xff0c;它允许你在函数组件中添加“状态”&#xff08;state&#xff09;。在传统的React类组件中&#xff0c;我们使用this.state来管理和更新组件的状态。然而&#xff0c;在函数组件中&#xff0c;由于它们…

【Docker】Docker下载安装_使用阿里云加速配置

1、下载安装 1.1前提条件 安装环境&#xff1a; 目前&#xff0c;CentOS 仅发行版本中的内核支持 Docker。Docker 运行在 CentOS 7 上&#xff0c;要求系统为64位、系统内核版本为 3.10 以上。Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上&#xff0c;要求系统为64位…

管理不到位,活该执行力差?狠抓这4点要素,强化执行力

管理不到位&#xff0c;活该执行力差&#xff1f;狠抓这4点要素&#xff0c;强化执行力 一&#xff1a;强化制度管理 1、权责分明&#xff0c;追责管理 要知道&#xff0c;规章制度其实就是一种“契约”。 在制定制度和规则的时候&#xff0c;民主一点&#xff0c;征求团队成员…

基于格网的边缘点检测(python)

1、背景介绍 前文已介绍对点云进行格网处理&#xff0c;可以计算平面点云面积、格网拓扑关系构建&#xff0c;相关博客如下&#xff1a; &#xff08;1&#xff09;点云格网过程可视化&#xff08;C PCL&#xff09;-CSDN博客 &#xff08;2&#xff09;平面点云格网过程及可…

一小时搞定Git(含盖IDEA使用)

文章目录 1. git基本概念1.1版本控制1.1.1 版本控制软件 2. 命令的使用2.1 Linux命令2.2 git基础指令2.2.1 设置用户2.2.2 初始化本地仓库2.2.3 查看本地仓库状态2.2.4 添加暂存区域2.2.5 提交本地库2.2.6 切换版本 2.3 分支操作2.3.1 分支基本操作2.3.2 合并操作2.3.4 分支开发…

C语言| 数组的插入

在下标为index的位置插入一个数字 1 定义数组a&#xff0c;数组b存放插入元素后的数组&#xff0c;下标index 值num 循环变量i 2 输入要插入的位置下标和数值 3 for循环 嵌套if多层语句 if数组的最大下标i < index,说明插入元素的位置在数组中不存在&#xff0c;系统随机分…

Python使用tkinter制作无边框透明时钟源码讲解(tkinter如何实现窗口无边框透明)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒📝 导入必要的库📝 创建主窗口🎯 去掉窗口边框🎯 设置窗口透明度🎯 允许窗口背景透明🎯 设置窗口背景颜色为透明🎯 设置窗口位置🎯 创建用于显示时间的标签📝 更新时间函数📝 使窗口可移动📝…

winRar去广告记录

效果&#xff1a;双击winRar.exe&#xff0c;不会弹出广告窗口&#xff0c;但会弹出使用时间许可警告&#xff0c;效果不是很完美。 工具&#xff1a;everything.exe&#xff08;非必须&#xff09;、sublime text&#xff08;非必须&#xff09;、spyxx.exe&#xff08;非必须…

python-今年第几天

[题目描述] 定义一个结构体变量&#xff08;包括年、月、日&#xff09;。 计算该日在本年中是第几天&#xff0c;注意闰年问题。输入格式&#xff1a; 年 月 日。输出格式&#xff1a; 当年第几天。样例输入 2000 12 31样例输出 366 数据范围 对于100%的数据&#xff0c;保…

啥移动硬盘格式能更好兼容Windows和Mac系统 NTFS格式苹果电脑不能修改 paragon ntfs for mac激活码

对于同时使用Windows和Mac操作系统的用户而言&#xff0c;选择一个既能确保数据互通又能满足大容量存储需求的移动硬盘格式尤为重要。下面我们来看看啥移动硬盘格式能更好兼容Windows和Mac系统&#xff0c;NTFS格式苹果电脑不能修改的相关内容。 一、啥移动硬盘格式能更好兼容…

开源项目推荐-vue2+element+axios 个人财务管理系统

文章目录 financialmanagement项目简介项目特色项目预览卫星的实现方式&#xff1a;首次进入卫星效果的实现方式&#xff1a;卫星跟随鼠标滑动的随机效果实现方式&#xff1a;环境准备项目启动项目部署项目地址 financialmanagement 项目简介 vue2elementaxios 个人财务管理系…

WordPress主题仿虎嗅网/雷锋网自媒体主题(两套打包)

主题介绍 这两款wordpress主题是精仿虎嗅网和雷锋网的&#xff0c;这两款主题应该是没有多大BUG&#xff0c;同时这两款主题目前跟现在的虎嗅、雷锋两个网站看上去并没有多大区别&#xff0c;唯一美中不足的就是不支持PHP7.0以上。经常逛虎嗅网与雷锋网的同志应该是喜欢这两款…

CSS基础学习记录(5)

目录 1、CSS语法 2、实例 3、CSS注释 4、id 选择器 5、class 类选择器 6、标签选择器 7、内联选择器 1、CSS语法 CSS 规则由两个主要的部分构成&#xff1a;选择器&#xff0c;以及一条或多条声明: 选择器&#xff08;Selector&#xff09;通常是您需要改变样式的 HTML …

组合数学、圆排列、离散数学多重集合笔记

自用 如果能帮到您&#xff0c;那也值得高兴 知识点 离散数学经典题目 多重集合组合 补充容斥原理公式 隔板法题目 全排列题目&#xff1a;

找不到msvcr120.dll怎么办,msvcr120.dll丢失的多种解决方法

msvcr120.dll是微软Visual C 2013的可再发行组件包中的一个文件&#xff0c;它是许多程序运行所必需的。这个文件包含了Visual C库&#xff0c;这些库为使用C编写的软件提供支持。如果你的电脑中缺少msvcr120.dll文件&#xff0c;那么依赖这个文件运行的应用程序可能无法启动或…

【Hadoop学习笔记】认识Hadoop

认识Hadoop 从网上找的课程做的笔记&#xff0c;有些图是自己理解画的&#xff0c;可能不正确&#xff0c;可以作为参考&#xff0c;有疑问的地方请直接指出&#xff0c;共同交流。 Hadoop是由Apache基金会开发的一个分布式系统基础架构&#xff0c;主要解决海量数据的存储和海…

干货 | 2024生成式AI产业落地路径研究报告(免费下载)

【1】关注本公众号&#xff0c;转发当前文章到微信朋友圈 【2】私信发送 2024生成式AI产业落地路径研究报告 【3】获取本方案PDF下载链接&#xff0c;直接下载即可。 如需下载本方案PPT/WORD原格式&#xff0c;诚挚邀请您微信扫描以下二维码加入方案驿站知识星球&#xff0c;…

SpringBoot-注解@PropertiySource读取外部属性文件

ConfigurationProperties和Value两个注解能从配置文件中获取数据&#xff0c;但是前面讲了他们是从全局配置文件中获取&#xff0c;且只能从全局配置文件中获取&#xff0c;那么如果是一些数值类的数据放在全局配置文件里&#xff0c;是不怎么合适的&#xff0c;我们往往会把他…

用腾讯云语音合成(TTS)批量生成英语绘本的朗读音频

孩子进行英语启蒙&#xff0c;需要看很多英语绘本&#xff0c;而且要听配套的音频来练听力。但有些英语绘本是没有对应音频的&#xff0c;下面简单几步&#xff0c;就可以将任意英语绘本制作出对应的英语朗读音频。 先到电子书资源网站搜索这个绘本名称&#xff0c;如果有电子…

OGG几何内核开发-复杂装配模型读取、显示、分析

OGG几何内核读取STEP模型文件的API有STEPCAFControl_Reader、STEPControl_Reader。 STEPCAFControl_Reader使用很复杂&#xff0c;但可以展示装配树&#xff0c;有利于模型的详细分析。 本文演示了《插件化算法研究平台V2》的OCC几何模型插件的部分功能&#xff1a;显示装配树…