问题:给定一个字符串儿,如何判断它里面是否包含全部26个英文字母?
就以CGTN今天的头版新闻为例,如何判断下面这段字符串儿中是否包含全部的英文字母?
其实思路很简单,动手数一数就知道了😂!那么,用代码的方式,又该如何去思考呢?给定的字符串儿中很有可能会包含标点符号、字母大小写混合,以及同一个字母出现多次的情况,这些都是我们要考虑的。所以,我们需要做三件事情:1、忽略字母大小写;2、排除重复字母的干扰;3、去掉标点符号。
对应上面的思路,很容易就知道,首先需要用uppercased()或者lowercased()函数将字符串儿中的字符全部转换成大写字母或者小写字母,然后再用集合Set中元素不可重复这一特性,将重复出现的字符给去掉,最后再利用ASCII码值过滤掉标点符号,如果最后剩下的元素刚好是26个,那么就说明给定的字符串儿中恰好就包含全部26个英文字母。用代码表示如下:
func challenge(input: String) -> Bool {
// 将左右的字符都转换为大写字母,然后过滤掉重复的字母
let set = Set(input.uppercased().characters)
// 过滤掉非字母符号
let letters = set.filter { $0 >= "A" && $0 <= "Z" }
// 如果最后返回元素的个数恰好是26个,就说明字符串儿中包含全部26个英文字母
return letters.count == 26
}
let str = "The DPRK is working on plans for a missile strike near the US Pacific territory of Guam, calling President Donald Trump's warning of fire and fury a load of nonsense and that only absolute force can work on him."
challenge(input: str) // 运行结果为false
代码最后运行的结果是false,说明给定的字符串儿中不包含全部26个英文字符。为了验证代码是否正确,可以把字符串儿的内容修改为26个英文字母: