520.检测大写字母【简单】
题目:
我们定义,在以下情况时,单词的大写用法是正确的:
- 全部字母都是大写,比如
"USA"
。 - 单词中所有字母都不是大写,比如
"leetcode"
。 - 如果单词不只含有一个字母,只有首字母大写, 比如
"Google"
。
给你一个字符串 word
。如果大写用法正确,返回 true
;否则,返回 false
。
示例 1:
输入:word = "USA"
输出:true
示例 2:
输入:word = "FlaG"
输出:false
提示:
1 <= word.length <= 100
word
由小写和大写英文字母组成
分析问题:
两个思路,第一个思路是模拟,模拟题目判断条件,走三次循环,时间复杂度相比于其他方法有点高,但是通俗易懂,最容易想到这种方法。具体思路就是写三个判断函数,每一个函数对应每一个判断条件,然后最后用 or 将他们连接起来,只要有一个正确则返回True,全部错误返回False。
第二个思路,一遍过。只需要进行一次循环,一次循环里面同时判断三个条件,这样可以大大节约时间。
代码实现:
思路1:
class Solution: def detectCapitalUse(self, word: str) -> bool: def pan(s:str): for j in s: if j.islower(): return False else: return True def le(s:str): for i in s: if i.isupper():return False return True def lp(s:str): if len(s)>1 and s[0].isupper(): for k in s[1:]: if k.isupper(): return False return True return False if pan(word) or le(word) or lp(word): return True return False
思路2:
class Solution: def detectCapitalUse(self, word: str) -> bool: n = len(word) if len(word)>=2: if word[0].isupper(): cnt = 0 for char in word: if char.isupper(): cnt += 1 if cnt == n or cnt == 1: return True elif word[0].islower(): cnt = 0 for char in word: if char.islower(): cnt += 1 if cnt == n: return True else: return True return False
总结:
两段代码目标一样,第一段代码侧重于解题时间短,很容易想出来;第二段代码侧重于时间复杂度低,代码高效,也不是很难想出来。两段代码各有千秋。
思路1详解:
方法内部定义了三个辅助函数:
pan
函数用于判断字符串中的所有字符是否均为大写。le
函数用于判断字符串中的所有字符是否均为小写。lp
函数用于判断字符串首字母大写,其余字母均为小写的情况。
最后,通过判断输入的字符串 word
是否符合上述三种规则中的任意一种,如果符合则返回 True
,否则返回 False
。
思路2详解:
首先,获取字符串 word
的长度 n
,并判断长度是否大于等于 2 。
如果长度大于等于 2 且首字符大写:
- 计算字符串中大写字符的个数
cnt
。 - 若
cnt
等于字符串长度(全大写)或cnt
等于 1(首字母大写),则返回True
。
如果长度大于等于 2 且首字符小写:
- 计算字符串中小写字符的个数
cnt
。 - 若
cnt
等于字符串长度(全小写),则返回True
。
如果字符串长度小于 2 ,则直接返回 True
。
如果以上条件都不满足,返回 False
考点:
- 对字符串的遍历操作,熟悉如何逐个处理字符串中的字符。
- 字符串方法的运用,如
isupper()
和islower()
来判断字符的大小写。 - 条件判断和逻辑推理,根据不同的情况制定判断规则。
收获:
- 提升了对字符串处理问题的解决能力,学会根据具体需求分析和设计算法。
- 增强了逻辑思维,能够清晰地考虑各种可能的情况,并通过代码准确实现。
- 更加熟悉函数的定义和使用,将复杂问题分解为小的函数模块,提高代码的可读性和可维护性。
- 对边界情况的处理有了更深入的理解,如字符串长度较短的情况。