刚刚完成最新的 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;
}
我知道嵌套循环正在杀死我,但我想不出一种方法来遍历字符串的“部分”而不添加另一个循环。
任何帮助,将不胜感激。