我正在尝试开发一个函数,它将返回输入字符串中最长的回文子串。我现在正在研究将字符串打散,以便分析每个小节是否是回文。代码如下:
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]
。这将返回从 0
到 place
的子数组,包括在内。
关于arrays - Ruby 最长回文子串函数中的奇怪输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38885850/