【发布时间】:2016-04-24 02:24:49
【问题描述】:
您好,我正在使用递归解决回文分区问题。这个问题是返回给定字符串输入的所有可能的回文分区。
输入:“aab”
输出:[[“aa”,“b”],[“a”,“a”,“b”]]
回文分区定义:给定字符串 S,分区是一组子字符串,每个子字符串包含一个或多个字符,因此每个子字符串都是回文
我的代码如下。我遇到的问题是结果数组永远不会正确填充。从高层次上看,我觉得我的逻辑是有道理的,但是当我尝试调试它时,我并不确定发生了什么。
def partition(string)
result = []
output = []
dfs(string, 0, output, result)
result
end
def dfs(string, start, output, result)
if start == string.length
result << output
return
end
(start..string.length-1).to_a.each do |i|
if is_palindrome(string, start, i)
output << string[start..(i-start+1)]
dfs(string, i+1, output, result)
output.pop
end
end
end
def is_palindrome(string, start, end_value)
result = true
while start < end_value do
result = false if string[start] != string[end_value]
start += 1
end_value -= 1
end
result
end
puts partition("aab")
【问题讨论】:
-
提示:
str == str.reverse是一种更快的回文测试方法。另外,你为什么要把一些东西放入一个数组中,然后几乎立即调用pop? -
您尚未定义“回文分区”。我相信它是以下内容:给定一个字符串
s,将其划分为子字符串,每个子字符串包含一个或多个字符,这样每个子字符串都是回文。例如"aab"可以划分为["a","ab"]、["aa","b"]和["a","b","c"]。第二个和第三个的所有元素(子串)都是回文,但第一个中的"ab"不是回文。正确的?显然,"abacdabefab"可以通过多种方式进行分区。 -
@CarySwoveland 补充说,作为编辑,谢谢应该更明确地提到那是什么
-
编辑就不用说了。
标签: ruby palindrome