编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入: ["flower","flow","flight"] 输出: "fl"
示例 2:
输入: ["dog","racecar","car"] 输出: "" 解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z
。
class Solution(object):
def longestCommonPrefix(self, shuzu):
"""
:type strs: List[str]
:rtype: str
"""
# 如果是空数组,就返回空
if len(shuzu) == 0:
return ""
# 定义一些标志位,i表示的是字符串的位置,j表示的是数组的元素,end相同前缀的最后位置
i = 0
j = 0
end = 0
# 遍历数组和字符串
while j < len(shuzu) and i < len(shuzu[j]):
# 当j == 0时,找到的前缀字母是什么,先确定第一个元素的字母,然后一个个遍历,看看其他的元素是否都有这个字母
if j == 0:
gonggongqianzui = shuzu[j][i]
# 否则说明没有相同的字母了。就跳出循环
else:
if shuzu[j][i] != gonggongqianzui:
break
# 如果一直遍历,到了最后一个元素的时候,就开始找元素的下一个字母
if j == len(shuzu) - 1:
i += 1
j = 0
end += 1
# 否则一直找数组的元素
else:
j += 1
# 跳出循环之后,就返回第一个元素的被找到的前缀
return shuzu[j][:end]
sl = Solution()
st = sl.longestCommonPrefix(["flower","flower","flowe","fldsfew"])
print(st)
总结:
1.思路是先确定数组中的第一个元素,然后分别对这个元素的所有字母都进行遍历,看看其他元素是否都存在这个元素,如果有就继续遍历下一个字母,并且记录当前相同字母的最大长度,如果没有,就跳出循环。
2.选取一个参照物,以及记录字母的位置