我寫了一個函數,我需要知道它的大O符號。 我試圖解決這個問題,我得到O(N^2),但是我被告知這不是正確的答案。該功能的大O符號是什麼?
有人可以告訴我什麼是正確的符號,也是一步一步解釋他們是如何來到這個答案?
該功能如下。
預先感謝
public static string Palindrome(string input)
{
string current = string.Empty;
string longest = string.Empty;
int left;
int center;
int right;
if (input == null || input == string.Empty || input.Length == 1) { return input; }
for (center = 1; center < input.Length -1; center++)
{
left = center - 1;
right = center + 1;
if (input[left] == input[center])
{
left--;
}
while (0 <= left && right < input.Length)
{
if (input[left] != input[right])
{
break;
}
current = input.Substring(left, (right - left + 1));
longest = current.Length > longest.Length ? current : longest;
left--;
right++;
}
}
return longest;
}
第一個'for'循環給你'N'迭代。 'while'循環循環'N/2'次最差情況和'1'最好情況。 – Blender
@Blender,while循環需要O(n^2)而不是O(n),請參閱我的答案以獲取詳細信息。 –
這功課嗎? xD – evotopid