strs = ["cir","car"]
#strs = ["flower","flow","flight"]
def get_min_str(lst):
return min(lst, key=len)
str1 = get_min_str(strs)
lens = len(strs)
x = ""
mlen = len(str1)
if(lens == 1):
print(strs[0])
for i in range(0, mlen):
for j in range(0, lens-1):
if( strs[j][i] == strs[j+1][i] ):
if(j == lens-2):
x = x + strs[j][i]
print(strs[j][i])
else:
break
print(strs[j][i] == strs[j+1][i])
print(x)因此,为了找到最长的公共前缀,我使用了两个循环。遍历这些值。但是在这个例子中,strs = "cir","car“。我应该值x= "c“,但我没有得到值"cr",因为我使用了中断函数。函数应该在c处停止。为什么不是?为什么我要得到"cr"your text的值?
发布于 2022-11-26 02:10:23
因为有两个嵌套循环,所以break关键字只退出内环。然后,第三个字母匹配,因此r被添加到x中。要解决这个问题,应该在退出外部循环时设置一个变量,并在每次迭代之前检查它。
编辑:另外,出于可读性的考虑,您可能需要探索enumerate()函数,它将可迭代(如字符串)转换为表单(index, value)的元组的可迭代性,因此您的代码可能如下所示:
should_break = False
for letter_index, current_character in enumerate(str1):
if should_break:
break
for str_index in range(0, lens):
if strs[str_index][letter_index] != current_character:
should_break = True # set break condition for outer loop
break # break from inner loop
else: # executed when the for loop doesn't break
x += current_characterhttps://stackoverflow.com/questions/74579225
复制相似问题