arrays - 当您将 array[index] 设置为等于引号时,这意味着什么?

标签 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 |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]=""

您将 idxidx2 之间的字符设置为空字符串,这意味着您将从 idx 中删除字符(包含)和 idx2(包含)来自 copy 字符串。

例如:

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"

关于arrays - 当您将 array[index] 设置为等于引号时,这意味着什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60253467/

相关文章:

php - 同一数组的数组索引合并

javascript - 如何在 Realm js 中指定 float 列表?

Char 数据类型变量

mysql - 为什么 Rails 将 TEXT 列截断为 65535 个字符?

HTML 删除文本之间所需的空格

c++ - 圆是否相交

c++ - 如何在 C++ 中处理数组(在堆栈上声明)?

ruby-on-rails - 无法在 pry 中访问本地方法变量

java - Java 中简单的类似数据库的集合类

c++ - 创建无重复的随机数序列