将 array[index] 设置为引号是什么意思?

mic*_*per 3 ruby arrays algorithm hash pattern-matching

我一直在研究一个问题,目标是获取一个字符串并在存在模式时返回最长的重复模式。例如,如果字符串是“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)
Run Code Online (Sandbox Code Playgroud)

如果这是相当常见的语法,请原谅我。到目前为止,我编码的时间还不到一年,到目前为止还没有在 StackOverflow 上找到答案。帮助将不胜感激!:)

Wil*_*sem 5

一个字符串可以被看作是一个字符序列。通过写作:

copy[idx..idx2]=""
Run Code Online (Sandbox Code Playgroud)

您设置的字符idxidx2空字符串,这样就意味着你是从删除字符idx(含)idx2从(含)copy的字符串。

例如:

irb(main):001:0> s = "foobar"
=> "foobar"
irb(main):002:0> s[1..3] = ""
=> ""
irb(main):003:0> s
=> "far"
Run Code Online (Sandbox Code Playgroud)

我们还可以插入另一个包含比序列更少、相等或更多字符的字符串。例如:

irb(main):007:0> s = "foobar"
=> "foobar"
irb(main):008:0> s[1..3] = "oofoob"
=> "oofoob"
irb(main):009:0> s
=> "foofoobar"
Run Code Online (Sandbox Code Playgroud)