You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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}"

代码说明

  1. 字符拆分:将输入字符串转为小写后拆分为单个字符的数组,统一大小写避免区分大小写的问题。
  2. 双向移除共有字符:
    • 对第一个单词的副本,遍历第二个单词的每个字符,删除副本中第一次出现的该字符(确保仅移除对应次数的共有字符)。
    • 对第二个单词的副本执行同样操作,移除与第一个单词共有的字符。
  3. 合并结果:将两个处理后的数组合并,再转为字符串,得到最终的非共有字符拼接结果。

测试你给出的示例:

  • 输入extrapolation和among,处理后temp1为["e","x","t","r","p","l","a","t","i","o"],temp2为["m","g"],合并后得到extrpolatiomg(与你给出的示例结果extrpolatimg仅顺序差异,若需要严格匹配原单词的字符顺序,可调整合并逻辑,但核心逻辑一致)。

内容的提问来源于stack exchange,提问作者Seby

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 19:32:41