最长共同前缀题目的思路探讨与源码
该题的题目如下图,核心是通过寻找字符串列表里的所有字符串的最长共同前缀。
本人在看到该题目后,认为问题的核心是寻找寻找最短的字符串,同时在这个基础上去将最短的字符串进行分解,逐个字符地和其他字符串去进行比较,最终得到和每个字符串的一个共同字符数的值,取一个最小值n,然后在最短字符串取前n个字符即可。
#喷火龙与水箭龟
test1=["flower","flow","flight"]
lenList=len(test1)
flagChar=''
finalBack=''
minLen=999999999
for iu in test1:
if(len(iu)==0):
finalBack='null_S'
continue
else:
if(len(iu)<minLen):
flagChar=iu
minLen=len(iu)
if(lenList==0):
finalBack=''
elif(lenList==1):
finalBack=test1[0]
elif(finalBack=='null_S'):
finalBack=''
else:
commonList=[]
flagCharLen=len(flagChar)
for stringStr in test1:
commonNum=0
for ig in range(flagCharLen):
if(stringStr[ig]==flagChar[ig]):
commonNum=commonNum+1
else:
break
commonList.append(commonNum)
prefixNum=min(commonList)
finalBack=flagChar[0:prefixNum]
print(finalBack)
在上述代码中,考虑到了空字符串和单个字符串的情况,然后对于那种在字符串列表中含有空字符串的将会直接返回空字符串结果。对于其他情况,首先寻找最短的字符串,然后将该最短字符串进行分解为字符,逐个与其他字符串进行比较,得出共同前缀有几个字符的数值,并最后取最小值作为共同前缀值,并返回最终结果。最终输入是 [“flower”,“flow”,“flight”],得到结果‘fl’是正确的。
需要注意的是,本代码是作者的测试代码,如需放到LeetCode上运行,需要将代码写为函数形式,并加上return返回值才可以运行通过。
最终结果如下:
最终结果如上图,本人的思路应该还不是最优的,希望朋友们能够多多指教。