|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
def longest_sub(string):
i = 0
max_length = 1
temp_length = 1
while (i < len(string) - 1):
if (string[i] <= string[i + 1]):
temp_length += 1
if (temp_length > max_length):
max_length = temp_length
max_index = i + 1
else:
temp_length = 1
i += 1
print("Longest substring in alphabetetic order is: ", end=' ')
for i in range(max_index - max_length + 1, max_index + 1):
print(string[i], end='')
print('\n')
s = 'azcbobobegghakl'
longest_sub(s)
s = 'abcbcd'
longest_sub(s)
搜到的正确代码是这样的,但是我看不懂while部分那一段。有没有大佬详细讲解一下?万分感谢
首先,程序定义了一个名为longest_sub的函数,它接受一个字符串作为参数。这个函数的目的是找到字符串中按字母顺序排列的最长子串。
在函数内部,有几个变量被初始化:
- i:这是一个循环计数器,从0开始,用于遍历字符串的每个字符。
- max_length:用于存储当前找到的最长子串的长度,初始化为1,因为至少有一个字符。
- temp_length:用于存储当前正在检查的子串的长度,也初始化为1。
现在,我们来看while循环。这个循环会持续进行,直到i到达字符串倒数第二个字符的位置(因为我们将要检查i和i + 1之间的关系)。
在循环中,首先检查字符串中的第i个字符(string[i])是否小于或等于第i+1个字符(string[i + 1])。如果满足条件,说明这两个个字符是按字母顺序排列的。这时,我们执行以下操作:
- 将 temp_length(当前子串的长度)增加 1,因为我们找到了一个新的按字母顺序排列的字符。
- 检查 temp_length 是否大于 max_length(目前找到的最长子串的长度)。如果大于,说明我们找到了一个更长的子串。我们将 max_length 更新为 temp_length,并将 max_index 设置为 i + 1。max_index 用于记录最长子串的结束位置。
如果 string[i] 不小于等于 string[i + 1],说明当前子串结束了。此时,我们将 temp_length 重置为 1,表示新子串的开始。
在循环结束后,我们已经找到了按字母顺序排列的最长子串。接下来,我们需要输出这个子串。为了实现这一点,我们使用一个 for 循环,从 max_index - max_length + 1(最长子串的开始位置)遍历到 max_index + 1(最长子串的结束位置的下一个字符)。在循环中,我们打印每个字符,直到输出完整个子串。
最后的两个示例调用展示了如何使用这个函数。第一个示例字符串 s = 'azcbobobegghakl',调用 longest_sub(s) 时,程序将输出 'beggh',因为这是字符串 s 中按字母顺序排列的最长子串。
第二个示例字符串 s = 'abcbcd',调用 longest_sub(s) 时,程序将输出 'abc',因为这是字符串 s 中按字母顺序排列的最长子串。
总结一下,这个程序的主要逻辑在于使用一个 while 循环遍历输入字符串,检查相邻字符之间的顺序关系。当发现按字母顺序排列的子串时,更新子串的长度和结束位置。在循环结束后,输出找到的最长子串。
|
|