Ruby字谜(Anagrams)程序开发求助:如何筛选正确变位词列表
变位词筛选程序实现思路与代码修正
1. 核心判断逻辑:识别变位词的关键
两个单词属于变位词的核心判定标准:
- 统一转换为相同大小写(比如全小写),避免大小写差异干扰判断
- 将单词拆分为单个字符、排序后,若结果完全一致,则为变位词
- 可选规则:排除与原单词完全相同的候选(比如输入
hello,候选里的hello不算变位词,可根据需求调整)
2. 修正输入处理的问题
你当前代码里,potential_anagrams = gets.chomp只能获取一行字符串,无法直接得到数组。需要让用户用逗号分隔候选词,再转成数组:
puts 'Enter word' word_input = gets.chomp.downcase # 统一转小写,消除大小写影响 puts 'Enter anagram list (separated by commas)' potential_anagrams = gets.chomp.split(',').map(&:strip) # 拆分字符串,同时去除每个候选词的前后空格
3. 编写变位词判断方法
写一个简洁的判断方法,封装核心逻辑:
def is_anagram?(original, candidate) # 排序后对比字母组成,同时排除原单词本身 original.chars.sort == candidate.downcase.chars.sort && original != candidate.downcase end
如果需求允许原单词算变位词,直接去掉&& original != candidate.downcase即可。
4. 筛选并格式化输出结果
遍历候选列表,筛选符合条件的变位词,再按要求输出:
correct_anagrams = potential_anagrams.select { |anagram| is_anagram?(word_input, anagram) } if correct_anagrams.empty? puts 'No correct anagrams found.' else puts "correct anagrams are: #{correct_anagrams.join(', ')}" end
完整整合代码
把所有部分组合起来,就能实现需求:
def is_anagram?(original, candidate) original.downcase.chars.sort == candidate.downcase.chars.sort && original.downcase != candidate.downcase end puts 'Enter word' word_input = gets.chomp puts 'Enter anagram list (separated by commas)' potential_anagrams = gets.chomp.split(',').map(&:strip) correct_anagrams = potential_anagrams.select { |anagram| is_anagram?(word_input, anagram) } puts "correct anagrams are: #{correct_anagrams.join(', ')}"
匹配你期望的方法调用形式
如果想直接用is_anagram? word: 'hello', anagrams: [...]这种关键字参数调用方式,修改方法如下:
def is_anagram?(word:, anagrams:) original = word.downcase correct = anagrams.select do |candidate| candidate.downcase.chars.sort == original.chars.sort && candidate.downcase != original end "correct anagrams are: #{correct.join(', ')}" end # 调用示例 puts is_anagram?(word: 'hello', anagrams: ['helo', 'elloh', 'heelo', 'llohe']) # 输出:correct anagrams are: elloh, llohe
内容的提问来源于stack exchange,提问作者Precious
相关产品推荐
相关产品推荐

