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]
在 a
和 b
之间交替,并生成范围 'a'..'a'
和'a'..'b'
一遍又一遍,这与字符最初来自的数组无关。
您无法在从数组中提取元素后构建范围,并期望从数组中生成范围。正确的子数组是通过使用范围作为数组的索引生成的:array[0..place]
。这个return是从0
到place
的子数组,包括
我正在尝试开发一个函数,它将 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]
在 a
和 b
之间交替,并生成范围 'a'..'a'
和'a'..'b'
一遍又一遍,这与字符最初来自的数组无关。
您无法在从数组中提取元素后构建范围,并期望从数组中生成范围。正确的子数组是通过使用范围作为数组的索引生成的:array[0..place]
。这个return是从0
到place
的子数组,包括