它是一个字符串问题。首先删除长度为1的所有重复的连续子字符串,然后删除长度为2的子字符串等等... 例如,如果我们有像这样的字符串 - > abcababceccced 除去长度为1的子串后,我们会得到abcababceced 除去长度为2的子串,我们将得到abcabced 除去长度为3的子串,我们将得到abced 这将是最终的输出在C++中删除字符串中的连续重复字符
我已经发明了一种经过后算法,但它具有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++中为这个问题提出了一个不太复杂的算法,我将不胜感激。
这只做第一遍。 – AShelly
@AShelly:你是对的。随意downvote :-(。我有一种感觉,原来的问题可以非常有效地使用后缀树来解决,像这样:http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1。 1.46.6378 –
为什么不把它添加到你的答案,而不是邀请downvotes :) – AShelly