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

Strange output in Ruby Longest Palindrome substring function

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

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"]]

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

[["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 开始并执行相同的操作,直到它获得字符串中所有可能的子字符串。但是,它只有 returns:

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

我的逻辑错误在哪里?

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

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

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