给定一串数字,我试图在奇数之间插入 '-'
,在偶数之间插入 '*'
。解决方案如下:
def DashInsertII(num)
num = num.chars.map(&:to_i)
groups = num.slice_when {|x,y| x.odd? && y.even? || x.even? && y.odd?}.to_a
puts groups.to_s
groups.map! do |array|
if array[0].odd?
array.join(" ").gsub(" ", "-")
else
array.join(" ").gsub(" ", "*")
end
end
d = %w{- *}
puts groups.join.chars.to_s
groups = groups.join.chars
# Have to account for 0 because Coderbyte thinks 0 is neither even nor odd, which is false.
groups.each_with_index do |char,index|
if d.include? char
if (groups[index-1] == "0" || groups[index+1] == "0")
groups.delete_at(index)
end
end
end
groups.join
end
非常复杂,我想知道我是否可以做这样的事情:
"99946".gsub(/[13579][13579]/) {|s,x| s+"-"+x}
s
是第一个奇数,x
是第二个。通常当我替换时,我替换匹配的术语,但这里我想保留匹配的术语并在模式之间插入一个字符。这将使这个问题变得简单得多。
最佳答案
这对你有用:
"99946".gsub(/[13579]+/) {|s| s.split("").join("-") }
# => "9-9-946"
这与您尝试的大致相似。它捕获多个连续的奇数位,并使用 gsub block 将它们拆分,然后将它们以“-”分隔。
这将包括协同工作的两种解决方案:
"99946".gsub(/[13579]+/) {|s| s.split("").join("-") }.gsub(/[02468]+/) {|s| s.split("").join("*") }
# => "9-9-94*6"
关于Ruby gsub 匹配串联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37356879/