arrays - Ruby 最长回文子串函数中的奇怪输出

标签 arrays ruby string nested palindrome

我正在尝试开发一个函数,它将返回输入字符串中最长的回文子串。我现在正在研究将字符串打散,以便分析每个小节是否是回文。代码如下:

def longest_palindrome(s)
  place = 0
  array = s.chars
  output = []
  while place < s.length
    output << (array[0]..array[place]).to_a
    place += 1
  end
  return output
end

如果给定字符串“ababa”,我希望得到的数组看起来像这样:

[["a"],["a","b"],["a","b","a"],["a","b","a","b"],["a","b","a","b","a"]]

但是,当我返回输出数组时,这是存储在里面的内容:

[["a"], ["a", "b"], ["a"], ["a", "b"], ["a"], ["a", "b"]]

我的函数会导致这种情况发生吗?

编辑:

不确定我是否应该为此开始另一个话题。我的代码现在如下:

def longest_palindrome(s)
 array = s.chars
 start = 0
 place = 1
 output = []
 while start < s.length - 1
    while place < s.length
      output << array[start..place]
      place += 1
    end
 start += 1
 end
return output  
end 

我的逻辑是,这将从索引 0 开始,然后逐渐捕获字符串的一个字符,直到整个字符串完成。然后它将从索引 1 开始并执行相同的操作,直到它获得字符串中所有可能的子字符串。但是,它只返回:

[["a"],["a","b"],["a","b","a"],["a","b","a","b"],["a","b","a","b","a"]]

我的逻辑哪里出了问题?

最佳答案

您误用了范围运算符来生成类似 'a'..'a' 的范围,它只是 'a'

您有两个完全独立的数组索引操作,每个操作都返回数组中要在范围内使用的单个元素(字符)。您得到 array[0],它始终是 a,而 array[place]a 之间交替> 和 b,并一遍又一遍地生成范围 'a'..'a''a'..'b',这与字符最初来自的数组无关。

您不能从数组中提取元素后构建范围并期望范围数组生成。正确的子数组是通过使用范围作为数组的索引生成的:array[0..place]。这将返回从 0place 的子数组,包括在内。

关于arrays - Ruby 最长回文子串函数中的奇怪输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38885850/

相关文章:

php - 在没有 Eval 的情况下在字符串中执行 PHP 代码

string - 与 Lua 5.1 中的 "[\0-\x7F\xC2-\xF4][\x80-\xBF]*"等效模式

c++ - 如何在不在 C++ 中创建数组的情况下创建变量名?

arrays - 如何在Delphi中使用变体数组

.net - 在VB.Net中遍历二维数组

ruby - 如何在 Ruby 中随机排序(打乱)数组?

arrays - 数组中所有成对整数和的异或

ruby - 为什么 Ruby 中的 MyClass.class.superclass 是 Module

ruby-on-rails - Rspec::允许每个实例接收消息

c - 如何使用连接两个动态字符串生成的字符串动态引用数组?