所以,我在麻省理工学院6.00.1课程中遇到了一个问题集,我必须确定随机生成的字符串中最长的字母子串(例如“abcdtttyyttt”,最长的字母子串应该是“abcdt”)。在
解决问题的代码如下所示:
s = "abzabc"
longestWord = []
subStr = []
for i in range(len(s)):
if s[i] >= s[i-1]:
subStr += s[i]
else:
subStr = s[i]
if len(subStr) > len(longestWord):
longestWord = subStr
print("Longest substring in alphabetical order is: ", "".join(longestWord))
!!!但这是我不明白的!!!
在弄清楚这一点之前,我花了好几个小时研究了一个解决方案,将“s”字符串中的当前字符(我必须检查的随机生成的字符串)与下一个字符进行比较,如下所示:
^{pr2}$使用这个解决方案,我总是得到一个“字符串索引超出范围”,因为最后一次比较字符串中的字母会超出范围,因为没有任何字母可以检查(s[I]+1部分)。在
那么当我比较s[I]和s[I]-1时,如何避免出现“字符串索引超出范围”错误呢?当然,第一个字母前面没有字母,这意味着我有点“超出范围”?在
希望有人能给我解释一下!我在别的地方都找不到答案。在
问题是当}。它不返回字符串开头之前的字符,而是返回字符串的最后一个字符。这可能不是你想要的!在
i
为零时,s[i-1]
是{修复方法可能是回到使用s[i+1],但要使用:
它将在字符串中的最后一个字符之前停止。在
或者,您可以使用:
^{pr2}$它将从1开始
i
(前提是至少有两个字符-您可能需要对一个字符串进行特殊处理)。在您的代码可以工作,但首先需要指定
subStr
s[0]值。在您可以使用^{} 函数,并将} 函数和生成器函数:
^{pr2}$key
kwarg设置为^{相关问题 更多 >
编程相关推荐