它是一個字符串問題。首先刪除長度爲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