最新の Codility を完了し、合格しましたが、100% 取得できませんでした
スペックはこちら
文字列 S のプレフィックスは、S の先頭の連続部分です。たとえば、「c」と「cod」は文字列「codility」のプレフィックスです。簡単にするために、プレフィックスは空ではない必要があります。文字列 S のプレフィックス P の積は、P の出現回数に P の長さを掛けたものです。より正確には、プレフィックス P が K 文字で構成され、P が S 内でちょうど T 回出現する場合、積は K * T に等しくなります。
たとえば、S = "abababa" には次の接頭辞があります。
"a", whose product equals 1 * 4 = 4,
"ab", whose product equals 2 * 3 = 6,
"aba", whose product equals 3 * 3 = 9,
"abab", whose product equals 4 * 2 = 8,
"ababa", whose product equals 5 * 2 = 10,
"ababab", whose product equals 6 * 1 = 6,
"abababa", whose product equals 7 * 1 = 7.
最長のプレフィックスは元の文字列と同じです。目標は、製品の価値を最大化するような接頭辞を選択することです。上記の例では、最大積は 10 です。この問題では、小文字の英字 (a-z) で構成される文字列のみを考慮します。
つまり、基本的には文字列トラバースの問題です。すべての検証パートに合格できましたが、時間内に負けてしまいました。これが私が書いたものです
int Solution(string S)
{
int finalCount = 0;
for (int i = 0; i <= S.Length - 1; i++)
{
string prefix = S.Substring(0, i + 1);
int count = 0;
for (int j = 0; j <= S.Length - 1; j++)
{
if (prefix.Length + j <= S.Length)
{
string newStr = S.Substring(j, prefix.Length);
if (newStr == prefix)
{
count++;
}
}
if (j == S.Length - 1)
{
int product = count * prefix.Length;
if (product > finalCount)
{
finalCount = product;
}
}
}
}
return finalCount;
}
ネストされたループが私を殺していることは知っていますが、他のループを追加せずに文字列の「セクション」をトラバースする方法は考えられません。
どんな助けでも大歓迎です。