次の質問に対して、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)。
前もって感謝します。