我很惊讶C++ STL字符串的查找子字符串方法find()比简单的O(n)字符串遍历还要快。这里有两个不同的函数:第一个函数只是在str1和str2上做了一次O(n)的遍历,但仍然没有第二个函数(str2中查找str1),后者可能需要O(n^2)的时间复杂度。我知道它们做的工作稍微有些不同,但为什么第二个函数更快呢?你们有任何想法吗?谢谢!
P.S 这两个函数是整个项目的一部分。它们在我的代码中被调用了很多次,用第二个函数运行时间大约减半(135秒对235秒)!
bool Is_Included1(string str1, string str2)
{
size_t i,s;
s=str1.size();
if (s<=str2.size())
{
for (i=0;i<s;i++)
if (str1[i]!=str2[i])
return false;
return true;
}
return false;
}
bool Is_Included2(string str1, string str2)
{
size_t i;
if (str1.size()<=str2.size())
{
i=str2.find(str1);
if (i==0)
return true;
else
return false;
}
return false;
}