我编写了一个算法来检查字符串是否是数组中任意数量字符串的串联(同时能够多次使用字符串)。我无法弄清楚算法的运行时到底是什么。
我检查有问题的字符串对数组中的每个单词,当我发现一个单词是从索引0开始的原始字符串的子字符串时,我也会检查数组中每个单词的剩余子字符串。所以我认为这是一个O(n ^ n),除非我遗漏了什么。
def check_concat(str,substr,words)
if substr == ""
return false
end
words.each do |word|
if word == substr && str != substr
return true
end
if substr.index(word) == 0
if check_concat(str,substr[word.length..-1],words)
return true
end
end
end
return false
end
答案 0 :(得分:1)
我们假设您的主字符串包含m words
,并且要搜索的数组中有n words
。在最坏的情况下,您需要使用数组中的每个单词检查主字符串中的每个单词,即mn
时间。因此,函数的时间复杂度为O(mn)
。
例如,主字符串为"Hello Hello Hello Hello Hello"
。要检查的数组包含以下单词'Hai', 'Fine', 'Hello'
。然后该功能将需要总共15次比较。