输入应该是一个字符串:
"abcd@gmail.com"
输出应该是一个字符串数组:
["abcd@gmail.com",
"a.bcd@gmail.com",
"ab.cd@gmail.com",
"abc.d@gmail.com",
"a.b.cd@gmail.com",
"a.bc.d@gmail.com",
"a.b.c.d@gmail.com"]
想法:“在第一个字符串部分(“abcd”)中使用一个点进行所有可能的组合。不允许使用连续的点。在第一个字符串部分(“abcd")"
这是我到目前为止想出的:
text,s = "abcd".split""
i=0
def first_dot(text)
text.insert 1,"."
end
def set_next_dot(text)
i = text.rindex(".")
text.delete_at i
text.insert(i+1,".")
end
我的方法是
- 写一个函数,设置第一个点
- 编写一个设置下一个点的函数
- ...(魔法)
我不知道如何把这些碎片拼凑起来。任何想法?或者更好的方法? 提前谢谢
编辑: 我想我找到了解决方案 :) 我会在大约一小时后发布它(它很棒 -> 真值表、二进制数、换位)
...这里是解决方案
s = "abc"
states = s.length
possibilites = 2**states
def set_space_or_dot(value)
value.gsub("0","").gsub("1",".")
end
def fill_with_leading_zeros(val, states)
if val.length < states
"0"*(states-val.length)+val
else
val
end
end
a = Array.new(possibilites,s)
a = a.map{|x| x.split ""}
b = [*0...possibilites].map{|x| x.to_s(2).to_s}
b = b.map{|x| fill_with_leading_zeros x,states}
b = b.map{|x| x.split ""}
c = []
for i in 0 ... a.size
c[i] = (set_space_or_dot (a[i].zip b[i]).join).strip
end
最佳答案
稍微改变一下 pduersteler 的答案:
possibilities = []
string = "abcd@example.com"
(string.split('@')[0].size-1).times do |pos|
possibility = string.dup
possibilities << possibility.insert(pos+1, '.')
end
关于ruby - 如何使用 ruby 中的字符串进行多个组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10619466/