Ich versuche, diese Frage zu lösen: Schreiben Sie eine Funktion, die den Null-basierten Index des längsten Laufs in einer Zeichenfolge findet. Ein Lauf ist eine fortlaufende Sequenz desselben Zeichens. Wenn es mehr als einen Lauf mit der gleichen Länge gibt, geben Sie den Index des ersten zurück.Index der längsten Lauf C#
Zum Beispiel IndexOfLongestRun ("abbcccddddcccbba") sollte 6 als längste Abfahrt Rückkehr ist dddd und es erscheint zuerst auf Index 6.
Nach was ich getan habe:
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);
}
}
Das Problem ist, dass, wenn ich zum letzten Index zum Beispiel "abbccaaaaaaaaaa" , die in diesem Fall ist, und wenn i=14
(nimmt diese Zeichenfolge als Beispiel) und wenn i<array1.Length-1
Statment ist falsch, die for-Schleife springt direkt auf return indexOf;
und den falschen Index zurück Ich versuche herauszufinden, ho w, um den Forloop zu forcieren, um die Implementierung fortzusetzen, damit idnxOf in den richtigen Index geändert werden kann. Irgendwelche Hilfe bitte?
ja am Ende Klammer der for-Schleife –
ohh leider meine ich indexOf –
warum Sie comparer Zeichen für den Vergleich verwendet? warum nicht direkt vergleichen? –