break
hinter der Schleife (zu sam Vertiefung springen wie die . for
Anweisung continue
springt der Schleife zu starten und zu tun, die nächste Iteration
Ihre Logik in der else:
Anweisung funktioniert nicht - Sie können es eine weniger einrücken müssen
. 210
if s[i] <= s[i+1]:
prüft „ist tatsächlich char weniger oder gleich dann nächstes Zeichen“ - wenn dies der Fall, dass Sie Ihre internen Zähler zu erhöhen und setzen längste wenn es länger
Sie ist vielleicht mit if s[i] <= s[i+1]:
in Schwierigkeiten geraten - Sie tun es bis len(s)-1
. "jfjfjf"
ist len("jfjfjf") = 6
- Sie würden von 0 bis 5 iterieren - aber die if Zugriffe s[5]
und s[6]
, die mehr als es gibt Elemente gibt.
Ein anderer Ansatz ohne explizite Indizes gehen über und in zwei Verantwortlichkeiten (Liste der alphabetisch Teilkette, sie Längstes bestellen):
# split string into list of substrings that internally are alphabetically ordered (<=)
def getAlphabeticalSplits(s):
result = []
temp = ""
for c in s: # just use all characters in s
# if temp is empty or the last char in it is less/euqal to current char
if temp == "" or temp[-1] <= c:
temp += C# append it to the temp substring
else:
result.append(temp) # else add it to the list of substrings
temp = "" # and clear tem
# done with all chars, return list of substrings
return result
# return the splitted list as copy after sorting reverse by length
def SortAlphSplits(sp, rev = True):
return sorted(sp, key=lambda x: len(x), reverse=rev)
splitter = getAlphabeticalSplits("akdsfabcdemfjklmnopqrjdhsgt")
print(splitter)
sortedSplitter = SortAlphSplits(splitter)
print (sortedSplitter)
print(len(sortedSplitter[0]))
Ausgang:
['ak', 's', 'abcdem', 'jklmnopqr', 'dhs']
['jklmnopqr', 'abcdem', 'dhs', 'ak', 's']
9
Diese man gibt das Array von Splits zurück + sortiert sie nach absteigender Länge. In einer kritischen Umgebung kostet dies mehr Speicher als Sie, da Sie nur einige Zahlen zwischenspeichern, während der andere Ansatz Listen füllt und in eine sortierte Kopie kopiert.
Um Ihre Codes Index Problem zu lösen ändern Sie Ihre Logik leicht: Beginnen Sie bei der zweiten Zeichen und testen, ob die vorherige ist weniger als dies. Auf diese Weise werden Sie jemals diese Zeichen überprüfen Sie mit dem man vor
s = 'abcvabcdefga'
current = 0
biggest = 0
for i in range(1,len(s)): # compares the index[1] with [0] , 2 with 1 etc
if s[i] >= s[i-1]: # this char is bigger/equal last char
current += 1
biggest = max(current,biggest)
else:
current = 1
print biggest
Vielen Dank! Können Sie den Code, den ich oben bearbeitet habe, überprüfen? Gibt es einen einfacheren Weg, die Zählung zu erreichen? Ich bin ziemlich neu und wurde nicht in die Syntax in Ihrer Lösung eingeführt, um die s [i] Fehler – Sam
meine Antwort wieder lesen :) Sie laufen in ein Indexproblem, weil Sie auf den Charakter hinter dem letzten zugreifen. Die Fehlermeldung (die Sie immer zu Ihren Fragen hinzufügen sollten auch bearbeiten: o) sagt Ihnen so viel: 'IndexError: String-Index außerhalb des Bereichs ' –
@Sam geringfügige Änderung an Ihrem Code zur Behebung Indexierungsfehler –