Arrays 将数组[索引]设置为引号是什么意思?

Arrays 将数组[索引]设置为引号是什么意思?,arrays,ruby,algorithm,hash,pattern-matching,Arrays,Ruby,Algorithm,Hash,Pattern Matching,我一直在研究一个问题,目标是获取一个字符串,并在存在模式时返回最长的重复模式。例如,如果字符串为“aabbbaa”,则将返回“yes aa”。如果字符串为“aavbbbvaabbb”,则将返回“yes bbb”。我查看了其他人的解决方案,相信除了这一行之外,我还能理解每一段代码,这一行似乎很关键:copy[idx..idx2]=“” 以下是整个解决方案: def PatternChaser(str) patterns = {} (0..str.length-1).each do |id

我一直在研究一个问题,目标是获取一个字符串,并在存在模式时返回最长的重复模式。例如,如果字符串为“aabbbaa”,则将返回“yes aa”。如果字符串为“aavbbbvaabbb”,则将返回“yes bbb”。我查看了其他人的解决方案,相信除了这一行之外,我还能理解每一段代码,这一行似乎很关键:
copy[idx..idx2]=“”

以下是整个解决方案:

def PatternChaser(str)
  patterns = {}

  (0..str.length-1).each do |idx| 
    (idx + 1..str.length - 1).each do |idx2| 
        copy = str.dup
        chunk = str[idx..idx2]
        len = chunk.length
        copy[idx..idx2] = ""
        patterns[chunk] = len if copy.include?(chunk) && !patterns.include?(chunk)
     end
  end
  return "no null" if patterns.empty?
  patterns.each { |k,v| return "yes" + " " + k if v == patterns.values.max }
end

puts PatternChaser(STDIN.gets)

如果这是相当常见的语法,请原谅。到目前为止,我已经编写了不到一年的代码,到目前为止还没有找到有关StackOverflow的答案。非常感谢您的帮助!:)

字符串可以看作是一系列字符。以书面形式:

copy[idx..idx2]=""
您正在将
idx
idx2
之间的字符设置为空字符串,这意味着您正在从
idx
(包含)和
idx2
(包含)中删除字符

例如:

irb(main):001:0> s = "foobar"
=> "foobar"
irb(main):002:0> s[1..3] = ""
=> ""
irb(main):003:0> s
=> "far"
irb(main):007:0> s = "foobar"
=> "foobar"
irb(main):008:0> s[1..3] = "oofoob"
=> "oofoob"
irb(main):009:0> s
=> "foofoobar"
我们还可以插入另一个字符串,该字符串包含的字符数少于、等于或多于序列中的字符数。例如:

irb(main):001:0> s = "foobar"
=> "foobar"
irb(main):002:0> s[1..3] = ""
=> ""
irb(main):003:0> s
=> "far"
irb(main):007:0> s = "foobar"
=> "foobar"
irb(main):008:0> s[1..3] = "oofoob"
=> "oofoob"
irb(main):009:0> s
=> "foofoobar"

您删除了
idx
idx2
之间的字符串内容,因此您正在删除字符。在第一个示例中,“bb”是否也重复了,就像在可能的重复重叠中一样?答案在文档中给出了实例方法。“”这对您来说是一个很好的读法。这
array[index]
在你问题的标题中似乎有点误导,因为
copy
是一个字符串,
idx..idx
是一个范围。啊,这就很好地解释了这一点。我现在明白了。感谢您的即时回复!!