我见过一种测试字符串是否为pangram的方法--一个包含字母表中每个字母的句子--但我不太理解它。我想知道为什么我的方法行不通。
def is_pangram(string)
alpha = ("a".."z").to_a
i = 0
while i < string.length
if string.downcase[i] == alpha.any?
alpha.delete(string.downcase[i])
end
i += 1
end
if alpha.length > 0
puts "This string is not a pangram"
else
puts "This string is a pangram"
end
puts alpha.length
puts alpha
end
is_pangram("The quick brown fox jumps over the lazy dog")
发布于 2018-10-10 23:35:18
Aleksei已经回答了这个问题...这里有一种稍微干净一点的方法。
def is_pangram(string)
alpha = ("a".."z").to_a
string.downcase.split("").each do |i|
alpha.delete(i) if alpha.include?(i)
end
if alpha.empty?
puts "This string is a pangram"
else
puts "This string is not a pangram"
end
puts alpha.length
puts alpha
end
is_pangram("The quick brown fox jumps over the lazy dog")
发布于 2018-10-11 04:00:01
下面的内容如何?
def is_pangram?(str)
str.downcase.scan(/[a-z]/).uniq.size == 26
end
is_pangram? "The quick brown dog jumps over the lazy fox."
#=> true
is_pangram? "The quick brown dog jumps over the wary fox."
#=> false
发布于 2018-10-11 01:35:41
,但我不太理解它
(预期的)算法构建了一个包含字母表中所有(26)个字母的数组。然后,它逐个字符地处理字符串,从第一个数组中删除该字符(如果它仍然在那里)。之后,它简单地测试第一个数组是否为空。如果是这样的话,字符串中的字符已经导致了数组中所有字符的移除,因此该字符串是一个pangram。如果不是,则说明字符串中缺少某些字符,且该字符仍在数组中。
https://stackoverflow.com/questions/52741644
复制相似问题