Próbuję rozwiązać to pytanie: Napisz funkcję, która wyszukuje indeks oparty na zera najdłuższego przebiegu w łańcuchu. Bieg to kolejna sekwencja tego samego bohatera. Jeśli jest więcej niż jeden cykl o tej samej długości, zwróć indeks pierwszego.Indeks najdłuższego uruchomienia C#
Na przykład IndexOfLongestRun ("abbcccddddcccbba") powinien powrócić 6 jak najdłuższej perspektywie jest dddd i to po raz pierwszy pojawia się na indeksie 6.
Po co mam zrobić:
private static int IndexOfLongestRun(string str)
{
char[] array1 = str.ToCharArray();
//Array.Sort(array1);
Comparer comparer = new Comparer();
int counter =1;
int maxCount = 0;
int idenxOf = 0;
for (int i =0; i<array1.Length-1 ; i++)
{
if (comparer.Compare(array1[i],array1[i+1]) == 0)
{
counter++;
}
else {
if(maxCount < counter)
{
maxCount = counter;
idenxOf = i - counter + 1;
}
counter = 1;
}
}
return idenxOf ;
}
}
public class Comparer : IComparer<char>
{
public int Compare(char firstChar, char nextChar)
{
return firstChar.CompareTo(nextChar);
}
}
Problemem jest to, że kiedy dojdę do ostatniego indeksu, na przykład "abbccaaaaaaaaa" , który jest w tym przypadku, i gdy i=14
(biorąc ten ciąg jako przykład) i gdy i<array1.Length-1
jest fałszywe, pętla for przeskoczy bezpośrednio do return indexOf;
i zwróci zły indeks , Próbuję dowiedzieć się ho w pchnąć forloop, aby kontynuować implementację, aby idenxOf mógł zostać zmieniony na właściwy indeks. Proszę o pomoc?
tak w ścisłej wspornika pętli for –
ohh przepraszam mam na myśli indexOf –
dlaczego użyłeś porównywarka do porównywania znaków? dlaczego nie porównać ich bezpośrednio? –