ruby - 为什么这个 ruby 方法没有在返回时终止?
问题描述
新手红宝石问题
代码挑战:字符串折叠:删除给定字符串中的所有相邻重复项。注意:删除相邻重复项会创建新的相邻重复项,您也必须删除这些重复项。
我很确定我用简单的递归解决了这个问题,但是当我在调试器中一步一步地完成这一步时,代码在到达返回行时并没有终止,而是开始向字符串添加然后删除字母,直到最终终止。
例如
zzzxaaxy => zxaaxy => zxxy => zy => zxxy => zy => zxxy =>
^ code hits return line here and should stop but instead continues
def same_char_collapse(str)
ar = str.split('')
ar.map.each_with_index do |char1, idx|
char2 = ar[idx+1]
if char1 == char2
ar.delete_at(idx)
ar.delete_at(idx)
same_char_collapse(ar.join(''))
end
end
return ar.join('')
end
解决方案
感谢您的帮助,经过大量的反复试验,我最终找到了解决方案
def dupes?(word)
word.each_char.with_index do |char, idx|
if char == word[idx+1]
return true
end
end
return false
end
def removeDupe(word)
ar = word.split('')
ar.map.with_index do |char,idx|
if char == ar[idx+1]
ar.delete_at(idx)
ar.delete_at(idx)
end
end
return ar.join('')
end
def same_char_collapse(str)
if dupes?(str)
same_char_collapse(removeDupe(str))
else
return str
end
end
推荐阅读
- c# - 我必须从数据库中选择相同的 projectId、相同的资源 Id 行
- node.js - 在 Electron 应用中,使用 webpack/electron-builder 打包后,在 worker_threads 提示 MODULE_NOT_FOUND 中需要第三方模块
- cube - 未能获得推荐的 Cuboid
- css - 媒体查询不适用于 CSS 网格布局
- ios - ios swift - 将设备令牌保存为打印不同值的数据格式
- reactjs - 何时获取数据以及何时更新状态?
- graphql - 如何使用 graphql codegen 处理 X-Hasura-Role
- c# - 如何使用 C# 更新 Excel 数据透视表数据
- html - 如何将类 css 添加到 php?
- ruby - 计算图中从任何给定顶点到另一个顶点的所有可能路径的正确算法是什么?