В книге «Cracking the Coding Interview», и этот Stack Overflow question обсуждает функцию, которая определяет, содержит ли строка все уникальные символы. Ответ на книгу, который использует смещение бит, находится в вопросе (см. Главный ответ на странице), и я не буду повторять его здесь.Как рассчитать временную сложность этой функции, которая проверяет, имеет ли строка все уникальные символы?
Ответ Java имеет сложность O (N), и я не могу понять, что означает O (N). Я действительно хочу узнать, какова временная сложность этой реализации, которую я написал только сейчас. Это O (N)? Как определить сложность?
static void Main(string[] args)
{
string stringToCheck ;
bool hasAllUniqueChars = false;
stringToCheck = "Test";
hasAllUniqueChars = CheckForUniqueChars(stringToCheck);
Console.WriteLine("String is Unique {0}", hasAllUniqueChars);
Console.Read();
}
private static bool CheckForUniqueChars(string stringToCheck)
{
for (int i = 0; i < stringToCheck.Length - 1; i++)
{
for (int j = i; j < stringToCheck.Length - 1; j++)
{
if (Char.ToUpper(stringToCheck.ElementAt(i)) ==
Char.ToUpper(stringToCheck.ElementAt(j+1)))
{
return false;
}
}
}
return true;
}
Это возвращает ложь для теста, теста, Привет, и верно для Супермена, SpiderMan и губок и работает отлично.
Спасибо
Ваш метод на самом деле * O (n^3) * (потому что 'string.ElementAt' делает еще один цикл внутри). Узнайте больше о нотации Big O по википедии: http://en.wikipedia.org/wiki/Big_O_notation – MarcinJuraszek
[Руководство для новичков в нотации Big O) (http://rob-bell.net/2009/06/a-beginners -guide-to-big-o-notation /) –
Этот вопрос кажется не по теме, потому что речь идет о ноте Big O –