首页 > 其他分享 >力扣-520. 检测大写字母

力扣-520. 检测大写字母

时间:2024-04-27 16:00:46浏览次数:18  
标签:大写字母 return string 大写 力扣 520 str word true

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.第四个参数是一个一元函数对象或函数指针,用于指定转换规则。

代码

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;
    }
};

标签:大写字母,return,string,大写,力扣,520,str,word,true
From: https://www.cnblogs.com/trmbh12/p/18162104

相关文章

  • 力扣-59. 螺旋矩阵 II
    1.题目题目地址(59.螺旋矩阵II-力扣(LeetCode))https://leetcode.cn/problems/spiral-matrix-ii/题目描述给你一个正整数 n,生成一个包含1到 n2 所有元素,且元素按顺时针顺序螺旋排列的 nxn正方形矩阵matrix。 示例1:输入:n=3输出:[[1,2,3],[8,9,4],[7,6,5]......
  • 力扣-54. 螺旋矩阵
    1.题目题目地址(54.螺旋矩阵-力扣(LeetCode))https://leetcode.cn/problems/spiral-matrix/题目描述给你一个m行n列的矩阵 matrix,请按照顺时针螺旋顺序,返回矩阵中的所有元素。 示例1:输入:matrix=[[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例2:......
  • 力扣-419. 甲板上的战舰
    1.题目题目地址(419.甲板上的战舰-力扣(LeetCode))https://leetcode.cn/problems/battleships-in-a-board/题目描述给你一个大小为mxn的矩阵board表示甲板,其中,每个单元格可以是一艘战舰'X'或者是一个空位'.',返回在甲板board上放置的战舰的数量。战舰只能水平......
  • 力扣-598. 区间加法 II
    1.题目题目地址(598.区间加法II-力扣(LeetCode))https://leetcode.cn/problems/range-addition-ii/题目描述给你一个mx n的矩阵 M和一个操作数组op。矩阵初始化时所有的单元格都为0。ops[i]=[ai,bi]意味着当所有的0<=x<ai和0<=y<bi时,M[x][y]应......
  • 力扣-LCR 126. 斐波那契数
    1.题目题目地址(LCR126.斐波那契数-力扣(LeetCode))https://leetcode.cn/problems/fei-bo-na-qi-shu-lie-lcof/题目描述斐波那契数(通常用F(n)表示)形成的序列称为斐波那契数列。该数列由0和1开始,后面的每一项数字都是前面两项数字的和。也就是:F(0)=0,F(1)=1F(n......
  • TODO-力扣-707. 设计链表
    1.题目题目地址(707.设计链表-力扣(LeetCode))https://leetcode.cn/problems/design-linked-list/题目描述你可以选择使用单链表或者双链表,设计并实现自己的链表。单链表中的节点应该具备两个属性:val和next。val是当前节点的值,next是指向下一个节点的指针/引用。如果......
  • 力扣-118. 杨辉三角
    1.题目介绍题目地址(118.杨辉三角-力扣(LeetCode))https://leetcode.cn/problems/pascals-triangle/题目描述给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。 示例1:输入:numRows=5输出:[[1],......
  • 力扣-442. 数组中重复的数据
    1.题目介绍题目地址(442.数组中重复的数据-力扣(LeetCode))https://leetcode.cn/problems/find-all-duplicates-in-an-array/题目描述给你一个长度为n的整数数组nums,其中nums的所有整数都在范围[1,n]内,且每个整数出现一次或两次。请你找出所有出现两次的整数,......
  • 力扣-448. 找到所有数组中消失的数字
    1.题目题目地址(448.找到所有数组中消失的数字-力扣(LeetCode))https://leetcode.cn/problems/find-all-numbers-disappeared-in-an-array/题目描述给你一个含n个整数的数组nums,其中nums[i]在区间[1,n]内。请你找出所有在[1,n]范围内但没有出现在nums中的数字,......
  • 力扣-645. 错误的集合
    1.题目介绍题目地址(645.错误的集合-力扣(LeetCode))https://leetcode.cn/problems/set-mismatch/题目描述集合s包含从1到 n 的整数。不幸的是,因为数据错误,导致集合里面某一个数字复制了成了集合里面的另外一个数字的值,导致集合丢失了一个数字并且有一个数字重复。......