LeetCode 520:Detect Capital(检测大写字母)

本文介绍了如何在Java中检查字符串中大写字母的正确使用,包括全大写、全小写和首字母大写的情况。提供了两种不同的实现方法,分别具有不同的时间和空间复杂度,并给出了相关算法分析。此外,还分享了相关的后端技术资源,如源码阅读、并发编程、设计模式等。

d5b3fd9f315cf7d297e7baa480bd0292.png

Together for a Shared future

一起向未来

6b693d6c8d8ca48b13a7d2fd3304073f.png

8da1e5525cb046defa856a23aa9d2089.png

5fa3d298fc8508c48add9908391ee3ef.png

今天带来的题目是《520. 检测大写字母》。

6e0c07e852f6c023326ac10651c6f66a.png

题目描述

d6a1b1fd4475a1ea7ab5b19fca0597b4.png

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

全部字母都是大写,比如 "USA" 。

单词中所有字母都不是大写,比如 "leetcode" 。

如果单词不只含有一个字母,只有首字母大写, 比如 "Google" 。

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

示例 1 :

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

示例 2:

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

提示:

  • 1 <= word.length <= 100

  • word 由小写和大写英文字母组成

ee3e498c4a11fb37d184e3b48084ccd9.png

遍历法

63bf5f0f43f0bcf8e2f76d0e510e1b90.png

/**
     * 全局遍历法
     * 执行用时:1 ms , 在所有 Java 提交中击败了 83.20% 的用户*
     * 内存消耗:39.6 MB , 在所有 Java 提交中击败了 14.23% 的用户
     * @param word
     * @return
     */
    public static boolean detectCapitalUse(String word) {
        int upperCount = 0;
        int lowerCount = 0;


        for (int i = 0; i < word.length(); i++) {
            if (65 <= word.charAt(i) && word.charAt(i) <= 90) {
                upperCount++;
            } else {
                lowerCount++;
            }
        }


        return ((65 <= word.charAt(0) && word.charAt(0) <= 90) && upperCount == 1 && lowerCount == (word.length() - 1))
                || (upperCount == word.length())
                || (lowerCount == word.length())
                ;
    }
public static boolean detectCapitalUseV2(String word) {
        // 若第 1 个字母为小写,则需额外判断第 2 个字母是否为小写
        if (word.length() >= 2 && Character.isLowerCase(word.charAt(0)) && Character.isUpperCase(word.charAt(1))) {
            return false;
        }


        // 无论第 1 个字母是否大写,其他字母必须与第 2 个字母的大小写相同
        for (int i = 2; i < word.length(); ++i) {
            if (Character.isLowerCase(word.charAt(i)) ^ Character.isLowerCase(word.charAt(1))) {
                return false;
            }
        }
        return true;
    }

8aaffe8eb4260234029c7711c409f701.png

复杂度分析

acb8cfb4ee2f4b96c66277e3036ee832.png

1)时间复杂度:O(n),其中 n 为字符串的长度。我们需要遍历字符串中的每个字符。

2)空间复杂度:O(1)。

后端技术&架构精华

e13ee6439294ba1f2523d8d3bbd67e76.png

《源码系列》

JDK之Object 类

JDK之BigDecimal 类

JDK之String 类

JDK之Lambda表达式

Spring源码:Event事件发布与监听

《经典书籍》

Java并发编程实战:第1章 多线程安全性与风险

Java并发编程实战:第2章 影响线程安全性的原子性和加锁机制

Java并发编程实战:第3章 助于线程安全的三剑客:final & volatile & 线程封闭

《服务端技术栈》

《Docker 核心设计理念

《Kafka史上最强原理总结》

《HTTP的前世今生》

《算法系列》

读懂排序算法(一):冒泡&直接插入&选择比较

《读懂排序算法(二):希尔排序算法》

《读懂排序算法(三):堆排序算法》

《读懂排序算法(四):归并算法》

《读懂排序算法(五):快速排序算法》

《读懂排序算法(六):二分查找算法》

《设计模式》

设计模式之六大设计原则

设计模式之创建型(1):单例模式

设计模式之创建型(2):工厂方法模式

设计模式之创建型(3):原型模式

设计模式之创建型(4):建造者模式

设计模式之创建型(5):抽象工厂设计模式

《LeetCode题库》

LeetCode 383:ransomNote(赎金信)

LeetCode 1446:Consecutive Characters(连续字符)

扫描二维码

获取技术干货

后台技术汇

6a29128985d04c3e56a951b35480b70e.png

好文!点个好看!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

后台技术汇

对你的帮助,是对我的最好鼓励。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值