这是悦乐书的第251次更新,第264篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第118题(顺位题号是520)。给定一个单词,你需要判断其中大写字母的使用是否正确。当下列情况之一成立时,我们将单词中大写字母的用法定义为正确:

  • 这个单词中的所有字母都是大写字母,如“USA”。

  • 这个单词中的所有字母都不是大写字母,如“leetcode”。

  • 如果它有多个字母,只有首字母是大写字母,如“Google”。

否则,我们定义该单词不以正确的方式使用大写字母。例如:

输入:“USA”

输出:true

输入:“FlaG”

输出:false

注意:输入将是一个非空单词,由大写和小写字母组成。

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 第一种解法

a-z的ASCII值是从97到122, A-Z的ASCII值是从65到90,取第一个字符来判断是大写还是小写,首字母是大写分为两种情况,一是全大写,二是首字母大写,后面的字母小写,然后依次使用循环进行判断,只要出现不符合的情况字符,可以直接返回false。

此解法的时间复杂度是(n),空间复杂度是O(1)。

public boolean detectCapitalUse(String word) {
int res = word.charAt(0)-'a';
if (res < 0) {
// 首字母大写,后面的字母小写
if (word.length() >= 2 && word.charAt(1)-'a' >= 0) {
for (int i=1; i<word.length(); i++) {
if (word.charAt(i) - 'a' < 0) {
return false;
}
}
} else {
// 全部大写
for (char c : word.toCharArray()) {
if (c - 'a' >= 0) {
return false;
}
}
}
} else {
// 全部小写
for (char c : word.toCharArray()) {
if (c - 'a' < 0) {
return false;
}
}
}
return true;
}

03 第二种解法

使用一个变量记数,遍历该单词中每一个字符,如果最后count等于0或者等于单词的长度,说明该单词是全大写或全小写字母组成,如果等于1并且首字母大写,说明其符合第三条的条件。

此解法的时间复杂度是(n),空间复杂度是O(1)。

public boolean detectCapitalUse2(String word) {
int count = 0;
for (char c : word.toCharArray()) {
if (c - 'a' < 0) {
count++;
}
}
if (count == word.length() || count == 0) {
return true;
}
return count == 1 && word.charAt(0)-'a' < 0;
}

04 第三种解法

还可以一行代码搞定。如果是全大写,那么该单词一定和其被转为全大写的单词相等。如果全小写或者首字母除外的小写,那么其从第二位开始的子串一定和该子串全转为小写后相等。

public boolean detectCapitalUse3(String word) {
return word.substring(1).equals(word.substring(1).toLowerCase()) ||
word.equals(word.toUpperCase());
}

05 小结

算法专题目前已日更超过三个月,算法题文章118+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

LeetCode算法题-Detect Capital(Java实现)的更多相关文章

  1. LeetCode算法题-Heaters(Java实现)

    这是悦乐书的第239次更新,第252篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第106题(顺位题号是475).冬天来了!您在比赛期间的第一份工作是设计一个固定温暖半径 ...

  2. LeetCode算法题-Sqrt(Java实现)

    这是悦乐书的第158次更新,第160篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第17题(顺位题号是69). 计算并返回x的平方根,其中x保证为非负整数. 由于返回类型 ...

  3. LeetCode算法题-Subdomain Visit Count(Java实现)

    这是悦乐书的第320次更新,第341篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第189题(顺位题号是811).像"discuss.leetcode.com& ...

  4. LeetCode算法题-Number of Lines To Write String(Java实现)

    这是悦乐书的第319次更新,第340篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第188题(顺位题号是806).我们要将给定字符串S的字母从左到右写成行.每行最大宽度为 ...

  5. LeetCode算法题-Unique Morse Code Words(Java实现)

    这是悦乐书的第318次更新,第339篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第186题(顺位题号是804).国际莫尔斯电码定义了一种标准编码,其中每个字母映射到一系 ...

  6. LeetCode算法题-Rotate String(Java实现)

    这是悦乐书的第317次更新,第338篇原创 在开始今天的算法题前,说几句,今天是世界读书日,推荐两本书给大家,<终身成长>和<禅与摩托车维修艺术>,值得好好阅读和反复阅读. 0 ...

  7. LeetCode算法题-Rotated Digits(Java实现)

    这是悦乐书的第316次更新,第337篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第185题(顺位题号是788).如果一个数字经过180度旋转后,变成了一个与原数字不同的 ...

  8. LeetCode算法题-Letter Case Permutation(Java实现)

    这是悦乐书的第315次更新,第336篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第184题(顺位题号是784).给定一个字符串S,将每个字母单独转换为小写或大写以创建另 ...

  9. LeetCode算法题-Minimum Distance Between BST Nodes(Java实现-四种解法)

    这是悦乐书的第314次更新,第335篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第183题(顺位题号是783).给定具有根节点值的二叉搜索树(BST),返回树中任何两个 ...

随机推荐

  1. 【Spark篇】---Spark中yarn模式两种提交任务方式

    一.前述 Spark可以和Yarn整合,将Application提交到Yarn上运行,和StandAlone提交模式一样,Yarn也有两种提交任务的方式. 二.具体      1.yarn-clien ...

  2. BBS论坛(十一)

    11.1.前台用户模型创建 (1)apps/front/models.py 首先安装:pip install shortuuid class FrontUser(db.Model): __tablen ...

  3. 从零开始学习PYTHON3讲义(八)列表类型跟冒泡排序

    <从零开始PYTHON3>第八讲 ​前面我们见过了不少的小程序,也见过了不少不同类型的变量使用的方法.但目前我们涉及到的,还都是单个的变量和单个的立即数.以变量来说,目前我们见到的,基本都 ...

  4. node 调试相关

    #0 node 正确的书写方式 为了防止后面出现混乱的各种书写,先来了解一下如何正确书写 node 的名称. 下面使用来自@bitandbang 推文中的图片展示如何正确书写 node 名称. nod ...

  5. 带着萌新看springboot源码11(springboot启动原理 源码上)

    通过前面这么多讲解,springboot原理应该也大概有个轮廓了,一些基本的配置,从客户端url到controller(配置一些要用的组件,servlet三大组件,处理器映射器,拦截器,视图解析器这些 ...

  6. SpringCloud Ribbon的分析

    Spring Cloud Ribbon主要用于客户端的负载均衡.最基本的用法便是使用RestTemplate进行动态的负载均衡.我们只需要加入如下的配置便能完成客户端的负载均衡. @Configura ...

  7. shell初识

    今天写blog才发现以前还有没写起的,我的天,我是睡着了么... 1,什么是shell? shell是unix/Linux系统的一个用充当内核与用户之间的接口的软件,它读取用户的输入命令,发送给内核让 ...

  8. 设计模式总结篇系列:适配器模式(Adapter)

    网上看到不少关于适配器模式的讲解,其中对于适配器模式解释的过于专业,一时不是特别理解适配器模式到底是用来干嘛的,具体的适用场景在哪,其最精髓的地方到底在哪. 本文结合自己的理解,阐述下对适配器模式的看 ...

  9. Java递归读取文件路径下所有文件名称并保存为Txt文档

    本文用递归的方法实现读取一个路径下面的所有文件并将文件名称保存到Txt文件中,亲测可用. 递归读取文件路径下的所有文件: /** * 递归读取文件路径下的所有文件 * * @param path * ...

  10. 分享基于MemoryCache(内存缓存)的缓存工具类,C# B/S 、C/S项目均可以使用!

    using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Caching; usi ...