Необяснима разлика в performance-а?
Здравейте, случи ми се нещо много странно, поне за мен. Решавах задача, в която трябваше да открием, колко пъти в даден String има някакъв substring, като overlapping-а е позволено.
Пример:
text = aaaaaa
substring = aa
Occurrances = 5
Реших задачата по следният начин:
class CountSubtringOccurrences
{
static void Main()
{
string text = Console.ReadLine().ToLower();
string substring = Console.ReadLine().ToLower();
int counter = 0;
int indexOfOccurrence = text.IndexOf(substring);
while (indexOfOccurrence != -1)
{
counter++;
indexOfOccurrence = text.IndexOf(substring, indexOfOccurrence + substring.Length - 1);
//indexOfOccurrence = text.IndexOf(substring, indexOfOccurrence + 1);
}
Console.WriteLine(counter);
}
}
Но Judge ми даваше Time error на последните 2 теста. Помъчих се още и пробвах 1-2 варианта, ама нищо не се получи. След което, погледнах видеото от упражненията и видях, че те са го решили по абсолютно същият начин, с една единствена разлика, която довежда до над 0.140 сек разлика в performance-a! Закоментираният ред в кода, е този който дава 0.015сек в Judge, а този който първоначално използвах дава 0.156сек. Не мога да си обесня как извикването на едно Lengh свойство, може да причини такъв damage!?
Надявам се някой може да обясни... най-малкото изглежда доста интересно!
Да... не се бях замислял, при търсенето на един char просто, какво ще се получи... ама си прав. И все пак не е лоша идеята ми, ама когато има такива специфични търсения и се чупи :(
Благодаря за find-a :)