题目
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例
输入: ["flower","flow","flight"]
输出: "fl"
说明
所有输入只包含小写字母 a-z
。
注意事项
思路一
直接循环,就这个终止条件需要好好想下,可以 try...except...else 来控制。这部分的知识点,我放在下面的知识点复习中了。
修改经历:
1. 没有考虑到空数组的输入。修改下判断。(第一次提交)
2. 提交成功。(第二次提交)
心得体会:
题目不难,就是耗时有点久。。。
最终代码展示:
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
i, rStr = 0, ''
if strs == []:
return ''
else:
while True:
try:
itemStr = [x[i] for x in strs]
except IndexError:
break
else:
if itemStr.count(strs[0][i]) == len(strs):
rStr += strs[0][i]
i += 1
else:
break
return rStr
思路二
其实这道题有很多解法,比如二分法等。这里想利用 python 的特点(题解大神的算法)。利用zip函数(这个会在Python 知识点复习中讲到)和set(来判断)。
通过zip(*strs)把解包的每个字符串打包为元组,在判断每个元组不重复元素的长度是不是大于1,大于1就是不相同的。
修改经历:
1. 一次成功。(第一次提交)
心得体会:
大神还是大神。。。
最终代码展示:
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
rStr = ''
for item in zip(*strs):
if len(set(item)) == 1:
rStr += item[0]
else:
break
return rStr