- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我试图用 Ruby 获取一个单词的所有变位词,但我的代码不起作用,对于字符串“ant”我只得到三个结果。任何帮助将不胜感激。
class Anagram
attr_reader :word
def initialize(word)
@word = word.downcase
end
def anagram_maker
@word_bank = []
index = @word.length
minus_one = index - 1
while (index * minus_one) != 0
anagram = @word.split('').shuffle.join
@word_bank << anagram
index -= 1
end
@word_bank = @word_bank.uniq
end
def display
anagram_maker
if @word_bank.count > 1
@word_bank.each do |anagram|
puts anagram
end
else
puts "Not enough letters for an anagram"
end
end
end
不确定在这里还能尝试什么。
最佳答案
您的代码非常不符合 Ruby 的习惯。
计算字符串的变位词就是计算字符串字符的排列,而 Ruby 使这项任务变得非常简单。重现您的 Anagram
类的示例是:
class Anagram
def initialize(word)
@word = word
end
def display
# In Ruby 2.0 @word.chars will return an array, no need for `to_a`.
@word.chars.to_a.permutation.map(&:join).uniq.each do |anagram|
puts anagram
end
end
end
anagram = Anagram.new('ant')
anagram.display
# Output
# ant
# atn
# nat
# nta
# tan
# tna
回答你的问题:你只得到三个字谜,因为 anagram_maker
方法内的 while
循环执行了三次(字符串的长度)。此外,我猜想只是打乱字符并不是生成排列的正确方法,请参阅“Algorithm to generate anagrams”以获取有关实现字谜算法的更多信息。
关于ruby - 你怎么能找到一个词的所有字谜?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20518894/
我的程序运行良好,这只是我需要的一个小建议;首先这是我的代码,用于检查两个单词是否是字谜;效果很好; #include int anagram_check(char [], char []); in
面试问题给定两个输入字符串,您只能交换字符串中的两个连续元素。您必须展示将一个字符串转换为另一个字符串的所有步骤(两个字符串将是彼此的字谜)。例如。口香糖到马克杯 古姆百货公司通用汽车大学微量气体发生
我正在尝试学习 Python。考虑这个简单的 C 语言变位词检查器: bool are_anagrams(const char* str1, const char* str2) { int str
(下面关于我的问题的代码) 根据 this stack overflow question我使用 Pegolon 的方法来生成 NSString 中一组字符的所有可能排列。但是,我现在试图让它不仅生成
testing if strings are anagrams有很多种方式.但是,我想知道是否有一种方法可以只对每个单词进行一次迭代?如果不是,在 Python 中最有效的方法是什么? 我们可以遍历第
我是一名优秀的程序员,十分优秀!