力扣-520. 检测大写字母

1.题目

题目地址(520. 检测大写字母 - 力扣(LeetCode))

https://leetcode.cn/problems/detect-capital/

题目描述

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

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

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

 

示例 1:

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

示例 2:

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

 

提示:

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

2. 题解

2.1 模拟(列举所有情况)

思路

我们要知道:
1.无论首字母如何,第二个字符和以后得所有字符大小写形式都是一样的
2.如果首字母大写,第二个字符可大写可小写无需讨论; 如果首字母小写, 就要讨论一下第二字符必须是小写

代码

  • 语言支持:C++

C++ Code:


class Solution {
public:
    bool detectCapitalUse(string word) {
        if(word.length() >= 2 && islower(word[0]) && isupper(word[1])) return false;

        for(int i = 2; i < word.length(); i++){
            if(islower(word[1]) ^ islower(word[i])) return false;
        }
        return true;
    }
};

复杂度分析

令 n 为数组长度。

  • 时间复杂度:\(O(n)\)
  • 空间复杂度:\(O(n)\)

2.2 模拟2

思路

C++中没有Java中的toUpperCase 和 toLowerCase, 只有tolower 和 toupper 这种转换单个字符的函数, 或者是 islower 和 isupper 这种判断大小写的函数
这里尝试使用transform配合编写一个uppercase 和 lowercase
transform中四个参数, 这里由于函数是复制了一份string字符串过去, 并不过改动原有字符串的!!!
1.第一个参数是待转换范围的起始迭代器。
2.第二个参数是待转换范围的结束迭代器(不包含在转换范围内)。
3.第三个参数是转换后结果的存储位置的起始迭代器。
4.第四个参数是一个一元函数对象或函数指针,用于指定转换规则。

这里的谓词toupper和tolower前为何要加上::?
因为力扣中其实自带了 using namespace std;
而toupper和tolower, 在std命名空间中有一个, 在全局命名空间中也有一个, 我们必须指明用的是全局作用于的那个, 也就是用了::

代码

class Solution {
public:
    bool detectCapitalUse(string word) {
        if(uppercase(word) == word) return true; // 全部大写
        if(lowercase(word) == word) return true; // 全部小写
        
        if(isupper(word[0])){
            string str = word.substr(1);
            if(str == lowercase(str)) return true;
        }
        return false;
    }
private:
    // 将字符串转换为全部大写
    string uppercase(string str) {
        transform(str.begin(), str.end(), str.begin(), ::toupper);
        return str;
    }

    // 将字符串转换为全部小写
    string lowercase(string str) {
        transform(str.begin(), str.end(), str.begin(), ::tolower);
        return str;
    }
};
posted @ 2024-04-27 15:58  DawnTraveler  阅读(4)  评论(0编辑  收藏  举报