我正在尝试分析以下函数的时间复杂度。该函数用于检查一个字符串是否由其他字符串组成。
set<string> s; // s has been initialized and stores all the strings
bool fun(string word) {
int len = word.size();
// something else that can also return true or false with O(1) complexity
for (int i=1; i<=len; ++i) {
string prefix = word.substr(0,i);
string suffix = word.substr(i);
if (prefix in s && fun(suffix))
return true;
else
return false;
}
}
我认为时间复杂度是O(n)
n 是单词的长度(对吗?)。但是由于递归在循环内,我不知道如何证明它。
编辑:
此代码不是正确的C++
代码(例如,prefix in s
)。我只是展示这个函数的思想,想知道如何分析它的时间复杂度