gpt4 book ai didi

ruby - 后缀数组并在字符串中搜索子串

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:03:03 26 4
gpt4 key购买 nike

我在 Ruby 中找到了后缀数组的实现,并对其进行了一些修改。这是我所拥有的:

class SuffixArray
def initialize(str)
@string = str
@suffix_array = []
(0...str.length).each do |i|
substring = @string[i...str.length]
@suffix_array << {:suffix=>substring, :index => i}
end

@sorted_suffix_array = @suffix_array.sort {|x,y| x[:suffix] <=> y[:suffix]}
end

def print_sorted
@sorted_suffix_array.each {|item| puts "#{item[:index]}=>#{item[:suffix]}"}
puts "total=>#{@sorted_suffix_array.size()}"
end

def print_unsorted
@suffix_array.each {|item| puts "#{item[:index]}=>#{item[:suffix]}"}
puts "total=>#{@suffix_array.size()}"
end

def find_substring(substring)
low = 0
high = @sorted_suffix_array.length
while(low <= high) do
mid = (low + high) / 2
comparison = @sorted_suffix_array[mid][:suffix]#[0..substring.length]
if comparison > substring
high = mid - 1
elsif comparison < substring
low = mid + 1
else
return @sorted_suffix_array[mid][:index]
end
end
end

end

它运行良好,但没有找到我想要的所有子字符串。例如

a = SuffixArray.new("there is a man who likes dogs")
puts a.find_substring("man") #won't be found
puts a.find_substring("who likes dogs") #will be found
puts a.find_substring("o likes dogs") #will be found

如何更改算法以使其找到我想要的所有子字符串?

最佳答案

您的代码几乎是正确的。我做了一些小修改,它起作用了。

def find_substring(substring)
low = 0
high = @sorted_suffix_array.length-1
while(low <= high) do
mid = (low + high) / 2
comparison = @sorted_suffix_array[mid][:suffix][0...substring.length]
if comparison > substring
high = mid - 1
elsif comparison < substring
low = mid + 1
else
return @sorted_suffix_array[mid][:index]
end
end
end

关于ruby - 后缀数组并在字符串中搜索子串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13466590/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com