Ruby开发:如何对比两个单词并提取非共有字符?
解决方案:提取两个单词的非共有字符(含次数处理)
Ruby没有直接的内置字符串方法可以一步实现你要的需求(因为需要按字符出现次数来移除共有部分,而不是简单的集合差集),但可以通过数组操作结合简单循环来完成,核心思路是对每个单词,移除与另一个单词中存在的字符(每个字符仅移除一次),再合并结果。
修正后的代码实现
puts "Enter the first word: " word_1 = gets.chomp.downcase.split('') puts "Enter the second word: " word_2 = gets.chomp.downcase.split('') # 处理第一个单词:移除在第二个单词中出现过的字符(每个字符仅删一次) temp1 = word_1.dup word_2.each do |char| if index = temp1.index(char) temp1.delete_at(index) end end # 处理第二个单词:移除在第一个单词中出现过的字符(每个字符仅删一次) temp2 = word_2.dup word_1.each do |char| if index = temp2.index(char) temp2.delete_at(index) end end # 合并两个处理后的数组并转为字符串 result = (temp1 + temp2).join puts "Result: #{result}"
代码说明
- 字符拆分:将输入字符串转为小写后拆分为单个字符的数组,统一大小写避免区分大小写的问题。
- 双向移除共有字符:
- 对第一个单词的副本,遍历第二个单词的每个字符,删除副本中第一次出现的该字符(确保仅移除对应次数的共有字符)。
- 对第二个单词的副本执行同样操作,移除与第一个单词共有的字符。
- 合并结果:将两个处理后的数组合并,再转为字符串,得到最终的非共有字符拼接结果。
测试你给出的示例:
- 输入
extrapolation和among,处理后temp1为["e","x","t","r","p","l","a","t","i","o"],temp2为["m","g"],合并后得到extrpolatiomg(与你给出的示例结果extrpolatimg仅顺序差异,若需要严格匹配原单词的字符顺序,可调整合并逻辑,但核心逻辑一致)。
内容的提问来源于stack exchange,提问作者Seby
相关产品推荐
相关产品推荐

