ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

字符串题目:检测大写字母

2021-10-25 18:02:00  阅读:206  来源: 互联网

标签:题目 texttt 大写 大写字母 首字母 字符串 word false true


文章目录

题目

标题和出处

标题:检测大写字母

出处:520. 检测大写字母

难度

2 级

题目描述

要求

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

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

给定一个字符串 word \texttt{word} word,如果单词的大写用法是正确的,返回 true \texttt{true} true。

示例

示例 1:

输入: word   =   "USA" \texttt{word = "USA"} word = "USA"
输出: true \texttt{true} true

示例 2:

输入: word   =   "FlaG" \texttt{word = "FlaG"} word = "FlaG"
输出: false \texttt{false} false

数据范围

  • 1 ≤ word.length ≤ 100 \texttt{1} \le \texttt{word.length} \le \texttt{100} 1≤word.length≤100
  • word \texttt{word} word 由大写和小写英语字母组成

解法

思路和算法

这道题目的最直观的解法是分别按照三条规则检查字符串 word \textit{word} word,只要符合其中的一条规则,即为大写用法正确。该解法最多需要遍历字符串三次,对于长度为 n n n 的字符串,时间复杂度是 O ( n ) O(n) O(n)。

检查字符串的大写用法是否正确不一定需要遍历整个字符串,如果在遍历过程中发现不符合大写用法,可提前返回,虽然时间复杂度仍然是 O ( n ) O(n) O(n),最坏情况下还是需要遍历整个字符串,但是在大多数情况下都可以减少运行时间。

提前返回的情况包括以下两种:

  • 首字母大写,其余字母既有大写又有小写;

  • 首字母小写,其余字母有大写。

根据上述两种情况,可以首先判断首字母的大小写情况,然后遍历字符串。首字母大写和小写的情况分别处理如下:

  • 如果首字母大写,则计数其余字母中的大写字母数量,当遍历到下标 i i i 时,除了首字母以外的大写字母数量应为 i i i(全部是大写)或 0 0 0(只有首字母大写),如果大写字母的数量不等于 0 0 0 且不等于 i i i,则说明既有大写又有小写,返回 false \text{false} false;

  • 如果首字母小写,则其余字母中只要有一个大写,则返回 false \text{false} false。

当遍历结束时如果没有发现大写用法不正确的情况,则返回 true \text{true} true。

代码

class Solution {
    public boolean detectCapitalUse(String word) {
        int length = word.length();
        boolean firstCapital = isCapital(word.charAt(0));
        if (firstCapital) {
            int capitalCount = 0;
            for (int i = 1; i < length; i++) {
                if (isCapital(word.charAt(i))) {
                    capitalCount++;
                }
                if (capitalCount != 0 && capitalCount != i) {
                    return false;
                }
            }
        } else {
            for (int i = 1; i < length; i++) {
                char c = word.charAt(i);
                if (isCapital(c)) {
                    return false;
                }
            }
        }
        return true;
    }

    public boolean isCapital(char c) {
        return c >= 'A' && c <= 'Z';
    }
}

复杂度分析

  • 时间复杂度: O ( n ) O(n) O(n),其中 n n n 是字符串 word \textit{word} word 的长度。对于每个字符判断是否是大写字母的时间复杂度是 O ( 1 ) O(1) O(1),最坏情况下需要遍历整个字符串 word \textit{word} word 一次,因此总时间复杂度是 O ( n ) O(n) O(n)。

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

标签:题目,texttt,大写,大写字母,首字母,字符串,word,false,true
来源: https://blog.csdn.net/stormsunshine/article/details/120090689

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有