【发布时间】:2015-11-22 06:13:48
【问题描述】:
我正在尝试计算 Ruby 中字符串的相似前缀开头的数量。例如;输入“ababaa”应该输出11;
ababaa = 6
babaa = 0
abaa = 3
baa = 0
aa = 1
a = 1
我已经了解了下面的代码,使用嵌套循环将上述每个作为数组进行遍历,但是看起来 Ruby 当前仅输出第一个 Array 对象“ababaa”的计数。
已解决,谢谢:)
def string_suffix(string)
num = 0
ary = []
string.length.times do
ary << string[num..string.length]
num = num + 1
end
result = 0
ary.each do |x| # ["ababaa", "babaa", "abaa", "baa", "aa", "a"]
x.chars.each_with_index do |c,index|
break unless c == string[index]
result = result + 1
end
end
return result
end
我已经看得很远了,但仍然无法解决这个问题,看起来(最终的,嵌套的)数组在“ary”数组的第一次迭代后中断了,只是返回了那个输出。
【问题讨论】:
-
您是否打算在这里分配作业:
if x = string[count]?因为=是赋值,所以不检查是否相等。因此,if表达式将是true任何时候string[count]的值为真值,即任何时候它都非零。 -
不,我没有看到,谢谢。结果还是一样,带回来6
-
每次通过
ary.each循环时,您也会将result归零。将result = 0放在ary.each...之前。num在第一个循环之后似乎没有用于任何事情,因此不需要num = 0。 -
是的,谢谢,我也看到了。当然输出还是6。
-
除了最后一次迭代的结果,你不会输出任何东西。如果您想为数组中的每个项目输出结果,那么(a)在循环中输出它,或者(b)收集结果并在迭代完成后输出它们。
标签: arrays ruby iteration suffix-array