【发布时间】:2011-08-07 13:54:17
【问题描述】:
这是一个字符串问题。首先删除所有长度为1的重复连续子字符串,然后删除长度为2的子字符串,依此类推... 例如,如果我们有这样的字符串 -> abcababceccced 删除长度为 1 的子字符串后,我们将得到 abcababceced 删除长度为 2 的子字符串后,我们将得到 abcabced 删除长度为 3 的子字符串后,我们将得到 abced 这将是最终输出
我设计了一个算法,但它的复杂度为 O(n3),这根本不可取。我的算法如下
char str[20]="abcababceccced";
int len=strlen(a);
for(i=1;i<=len/2;i++){
for(j=0;j<len;){
bool flag=chk(a,j,i);//this function will check whether the substring starting at a[j] and a[j+i] of length i are same or not.
if(flag){
//remove the second same substring.
}
else
j=j+i;
}
}
如果有人在 C++ 中针对这个特定问题提出一种不太复杂的算法,我将不胜感激。
【问题讨论】:
标签: c++ string algorithm complexity-theory