这是一个字符串问题。首先删除所有长度为1的重复连续子串,然后删除长度为2的子串,以此类推......例如,如果我们有这样一个字符串 -> abcababceccced,在删除长度为1的子串后,我们将得到abcababceced,在删除长度为2的子串后,我们将得到abcabced,在删除长度为3的子串后,我们将得到abced。这将是最终输出结果。
我已经想出了一个算法,但它的时间复杂度为O(n3),这并不理想。我的算法如下:
我已经想出了一个算法,但它的时间复杂度为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 ++提供一个更简单的算法来解决这个特定问题,我将非常感激。