今天打开力扣,看到每日一题是判断句子是否为全字母句。
一如既往,我们需要先读题来理解出题人的意图。
首先,题干第一句给出了对“全字母句”的定义--“全字母句指包含英语字母表中每个字母至少一次的句子。”后面给出了对我们的要求:
“给你一个仅由小写英文字母组成的字符串 sentence
,请你判断 sentence
是否为 全字母句 。
如果是,返回 true
;否则,返回 false
。”
首先我们先分析上面这段话。“仅由小写英文字母构成”说明了我们要考虑的字母只有从a到z这26个小写英文字母,“判断其是否为全字母句”就需要我们对这个句子当中的每一个字母都要进行检验,只有a到z这26个字母都出现过一次才能叫做“全字母句”。这也就是后面返回True和False的原因。
前文提到,只有a到z这26个字母都出现过一次才能叫做“全字母句”。我们需要通过对每个字母都进行检查,通过循环a到z字母,然后通过对句子当中进行检查去检测26个字母是否全都存在,假若正在循环的字母存在,则进行下一次循环,如果不存在的话,则直接返回False,如果最后26个字母全都存在,就返回True。
这里笔者使用了Python3进行后面思路的讲解。
这里的思路采取了@AK自动机枚取字母的思路。非常感谢这位大佬。
class Solution:
def checkIfPangram(self, sentence: str) -> bool:
for i in range(26):
首先是进行循环,因为从a到z一共26个字母,因此这里的range次数写了26
a = chr(ord('a')+i)
这里的chr()函数是界定检查字母的范围,这里将范围定义成了‘a’字符的ASCII值97到‘z’字符对应的122。ord()函数是返回‘a’字符的ASCII值。
if a not in sentence:
这里是判断字母是否出现在句子当中,如果出现了就继续执行下一个循环,反之直接终止循环,返回False。
return False
如果循环全部执行完毕且26个字母都出现的话,最后会返回True。
return True