C++ 我的LCS实现的运行时计算
请帮助我找到我实现的最大公共子字符串问题的运行时C++ 我的LCS实现的运行时计算,c++,algorithm,runtime,big-o,lcs,C++,Algorithm,Runtime,Big O,Lcs,请帮助我找到我实现的最大公共子字符串问题的运行时 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()){
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;
}
intmain(){
字符串a;
b串;
cin>>a>>b;
字符串::迭代器a1,b1;
字符串最大值、温度;
对于(a1=a.begin();a1!=a.end();a1++){
b1=查找(b.开始(),b.结束(),*a1);
如果(b1!=b.end()){
温度+=(*b1);
而(((b1+1)!=(b.end())和(*(a1+1))=(*(b1+1))){
a1++;
b1++;
温度+=(*b1);
}
if(max.size()实现的最坏情况是两个字符串相同的情况。在这种情况下,时间复杂度为O(n*m),n->outer-loop,m->查找或扩展匹配
顺便说一句,您不必使用临时字符串,只需使用长度为std::sort
的计数器需要时间O(n log n)(大多数排序算法的标准实现也是如此)。此外,请记住,您不能低估查找
步骤所需的时间,这将需要时间O(m)基于此,您认为运行时是什么?您必须使用动态编程在O(n.m)
@Jarod42中解决它,这更糟的是什么?@templatetypedef我从来没有使用过sort。我的意思是find,所以n次调用来查找哪个需要O(m)时间,哪个是O(nm)对的?使用a=“abbbbbbba”和b=“abababbbbbbba”
,您的结果是错误的。