zoukankan      html  css  js  c++  java
  • 领扣(LeetCode)检测大写字母 个人题解

    给定一个单词,你需要判断单词的大写使用是否正确。

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

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

    否则,我们定义这个单词没有正确使用大写字母。

    示例 1:

    输入: "USA"
    输出: True
    

    示例 2:

    输入: "FlaG"
    输出: False
    

    注意: 输入是由大写和小写拉丁字母组成的非空单词。

    这题比较简单。第一个想法是做三个判断。一个判断是不是全部小写,一个判断是不是全部大写,一个判断是不是首字符大写,其他字符小写。

    代码如下:

     1 class Solution {
     2     public boolean detectCapitalUse(String word) {
     3         if (word.equals(word.toLowerCase()) || word.equals(word.toUpperCase()))
     4             return true;
     5         else if ('A' <= word.charAt(0) && word.charAt(0) <= 'Z') {
     6             String tmp = word.substring(1);
     7             if (tmp.equals(tmp.toLowerCase()))
     8                 return true;
     9             else
    10                 return false;
    11         }
    12         return false;
    13     }
    14 }

    但是这样写,算法的执行速度很慢,只打败了10%的玩家 XD 。因为对这个字符串内的字符进行了多次遍历。然后就在想,为什么不用一次遍历解决呢?因为全部大写,全部小写,首字符大写三个情况可以在一个遍历中判断。首先置三种情况的结果都为真,然后一旦遇到不符合其中任意一种情况的时候,将那种情况置为假,最后输出三种结果或的结果。这样的执行速度就非常快了。打败了86%的人。

    代码如下:

     1 class Solution {
     2     public boolean detectCapitalUse(String word) {
     3         boolean case1=true,case2=true,case3=true;
     4         for(int i=0;i<word.length();i++)
     5         {
     6             if('A'<=word.charAt(i) && word.charAt(i)<= 'Z')
     7             {
     8                 case2=false;
     9                 if(i>=1)
    10                     case3=false;
    11             }
    12             if('a'<=word.charAt(i) && word.charAt(i)<= 'z')
    13             {
    14                 case1=false;
    15                 if(i==0)
    16                     case3=false;
    17             }
    18         }
    19         return case1 || case2 || case3;
    20     }
    21 }

     最后呢,题外话,想看一下C++和JAVA执行速度的区别,于是用C++改写了代码,结果发现,执行速度降低了20ms,这次打败了91%的人。C++果然天下第一啊

    代码如下:

     1 class Solution {
     2 public:
     3     bool detectCapitalUse(string word) {
     4         bool case1=true,case2=true,case3=true;
     5         for(int i=0;i<word.length();i++)
     6         {
     7             if('A'<=word[i] && word[i]<= 'Z')
     8             {
     9                 case2=false;
    10                 if(i>=1)
    11                     case3=false;
    12             }
    13             if('a'<=word[i] && word[i]<= 'z')
    14             {
    15                 case1=false;
    16                 if(i==0)
    17                     case3=false;
    18             }
    19         }
    20         return case1 || case2 || case3;
    21     }
    22 };
  • 相关阅读:
    Sql Server字符串拆分(Split)方法汇总
    Raid0、Raid1、Raid0+1、Raid3和Raid5 几种磁盘阵列区别
    浅谈sql优化
    python 多进程和异步io的有机结合 Error in atexit._run_exitfuncs
    asp.net.core学习笔记1:swagger的使用和webapi接收Jobject对象
    在windows服务中托管asp.net.core
    人脸识别:face_recognition初尝试
    python 快速搭建局域网文件服务器 SimpleHTTPServer http.server
    sso和oauth2.0的简单了解学习
    python常用删除库的方法
  • 原文地址:https://www.cnblogs.com/axiangcoding/p/9898489.html
Copyright © 2011-2022 走看看