<p><code>break</code>将跳转到循环后面(作为<code>for</code>语句跳转到sam缩进)。<code>continue</code>将跳转到循环的开头并执行下一次迭代</p>
<p>你在<code>else:</code>语句中的逻辑不起作用-你需要减少一个缩进。你知道吗</p>
<hr/>
<pre><code>if s[i] <= s[i+1]:
</code></pre>
<p>检查“实际字符是否小于或等于下一个字符”-如果是这种情况,则需要增加内部计数器,如果较长,则设置longest</p>
<p>你可能会因为<code>if s[i] <= s[i+1]:</code>而惹上麻烦-你要一直干到<code>len(s)-1</code>。<code>"jfjfjf"</code>是<code>len("jfjfjf") = 6</code>—您可以从0到5进行迭代—但是if访问<code>s[5]</code>和<code>s[6]</code>,这两个值比有个项还多。你知道吗</p>
<hr/>
<p>一种不同的方法,不需要遍历显式索引并将其分为两个职责(获取按字母顺序排列的子字符串的列表,首先对它们进行最长排序):</p>
<pre><code># 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]))
</code></pre>
<p>输出:</p>
<pre><code>['ak', 's', 'abcdem', 'jklmnopqr', 'dhs']
['jklmnopqr', 'abcdem', 'dhs', 'ak', 's']
9
</code></pre>
<p>这个函数返回拆分数组+按长度降序排列。在一个关键的环境中,这比你的内存消耗更多,因为你只缓存一些数字,而另一种方法填充列表并将其复制到一个排序的列表中。你知道吗</p>
<p>要解决代码索引问题,请稍微更改逻辑:
从第二个字符开始,测试前一个字符是否小于这个字符。这样你就可以把这个字符和以前的字符核对一下了</p>
<pre><code>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
</code></pre>