请帮我尝试找到我实现最大公共子字符串问题的运行时
int main(){
string a;
string b;
cin>>a>>b;
string::iterator a1,b1;
string max,temp;
for(a1=a.begin();a1!=a.end();a1++){
b1=find(b.begin(),b.end(),*a1);
if(b1!=b.end()){
temp+=(*b1);
while( ((b1+1) != (b.end())) and ((*(a1+1))==(*(b1+1)))){
a1++;
b1++;
temp+=(*b1);
}
if(max.size()<temp.size()){
max.assign(temp);
}
temp.clear();
}
}
cout<<max;
}
函数std :: find需要O(n)时间。所以这应该是O(nm),其中n和m是字符串的长度。它是否超过O(nm)?
答案 0 :(得分:0)
您实施的最坏情况是两个字符串相同的情况。在这种情况下,时间复杂度是O(n * m),n->外环,m - >找到或扩展匹配 顺便说一句,你不必使用临时字符串,只需使用长度为
的计数器