0

我已经看到了一种测试字符串是否为 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")
4

3 回答 3

1

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-10T15:35:17.683 回答
1

下面的呢?

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-10T20:00:00.960 回答
0

但我不太明白

(预期的)算法构建了一个包含所有(26)个字母的数组。然后它逐个字符地处理字符串,从第一个数组中删除该字符(如果它仍在其中)。之后,它只是测试第一个数组是否为空。如果是这样,则字符串中的字符导致数组中的所有字符都被删除,因此该字符串是一个 pangram。如果不是,则字符串中“缺少”某些字符,并且该字符仍在数组中。

于 2018-10-10T17:35:41.120 回答