O(n)
为什么 C++ STL 字符串查找子字符串的 find 方法比简单的字符串传递要快,我有点震惊。这里有两个不同的函数:为什么在 , 中找到的第二个函数str1
比str2
第一个函数快(优化得很好)?我知道第一个函数的任务略有不同,但它仍然只是一个传递str1
and str2
(O(n))
,而第二个函数可能O(n^2)
需要str1
在str2
. 真的为什么?你们有什么想法吗?先感谢您。
PS 这些功能是更大项目的一部分。它们在我的代码中被调用了很多次来比较两个字符串。如果我使用第二个函数,整个代码的运行时间几乎是一半(135 秒 VS 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;
}