Ruby Longest Palindrome子串函数中的奇怪输出

时间:2016-08-11 01:16:30

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

我逻辑中的缺陷在哪里?

1 个答案:

答案 0 :(得分:3)

您误用范围运算符来生成'a'..'a'等范围,这只是'a'

您有两个完全独立的数组索引操作,每个操作都返回一个元素(字符),以便在一个范围内使用。您获得的array[0]始终为a,而array[place]会在ab之间切换,并生成范围'a'..'a''a'..'b'一遍又一遍,这与字符最初来自的数组无关。

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