對於以下問題,我很難找到比O(n^2)更好的方法。字符串中的子串計算
我給了一個字符串,例如xyxxz
。
現在我需要在給定字符串的每個前綴中找到匹配字符的總數。
這裏,字符串可能的前綴是:
xyxxz : matching characters is 5
yxxz : matching characters is 0 (since 1st character doesnt match)
xxz : matching characters is 1
xz : matching characters is 1
z : matching characters is 0
這應該是輸出。 我做了下面的代碼:
cin>>str;
len=str.length();
for(i=0;i<len;i++){
sum=0;
k=i;
for(int j=0;j<len;j++)
{
if(str[k] == str[j]){
sum++;
k++;
}
else
break;
}
cout<<sum<<" "; //I get the output 5 0 1 1 0
}
但它是爲O(n^2)。我想要一個更好的方法:可能是O(n)或O(nlogn)。
在此先感謝。
指出'std :: mismatch',其中IIRC是線性複雜度。 – chris 2012-07-26 04:20:46
這會有所幫助。謝謝@chris :) – vijay 2012-07-26 04:24:49
如果你想要它,[這個頁面](http://en.cppreference.com/w/cpp/algorithm/mismatch)有一個可能的實現。這是一個很好的開始,你可以在哪裏改進。 – chris 2012-07-26 04:25:59