1. 题目地址
2. 题目描述
- 英文描述
Write a function to find the longest common prefix string amongst an array of strings.
If there is no common prefix, return an empty string "".
Example 1:
Input: strs = ["flower","flow","flight"]
Output: "fl"
Example 2:
Input: strs = ["dog","racecar","car"]
Output: ""
Explanation: There is no common prefix among the input strings.
Constraints:
1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i] consists of only lower-case English letters.
- 中文描述
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入:strs = ["flower","flow","flight"]
输出:"fl"
示例 2:
输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。
提示:
1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i] 仅由小写英文字母组成
3. 解题思路
- 第一种:横向比较:首先想到的就是用横向比较的方法来解决。
- 思想:
- 题目是要求找最长公共前缀,也就是字符串数组中每个字符串所共有的最长公共前缀。
- 最先想到的就是:两两比较,找出这两个之间的最长公共前缀,再拿这个当前的最长公共前缀去和第三个字符串比较找到最长公共前缀,更新这个最长公共前缀,直到所有的都比较完确定出最终的最长公共前缀。
- 遍历结束的条件是:当前的最长公共前缀为空串 或者 遍历到数组结束。(因为当前最长公共前缀已经是空串的话,就不需要往后遍历了,说明这个字符串数组不存在最长公共前缀)
- 时间复杂度:O(mn),其中:m是字符串数组中字符串的平均长度,n是字符串数组中字符串的个数即字符串数组的长度。
- 空间复杂度:O(1)
- 思想:
- 第二种:纵向比较法
- 思想:假设字符串数组的长度为n,纵向比较法可以理解为:拿n个指针指向这些字符串的同一列,同时进行比较,往后遍历,直到指针所指位置的值出现不相等的情况。那么,这一列之前的部分就是最长公共前缀。
- 分析:
- 时间复杂度:
- 空间复杂度:
4. 解题关键
- 要想到栈的结构
- 时间复杂度:
- 空间复杂度:
- 也可用正则匹配的方式
- 时间复杂度:
- 空间复杂度:
5. 示例代码
横向比较法:
python代码
class Solution:
def findPrefix(self, str1, str2):
minlen = min(len(str1), len(str2))
index = 0
while index < minlen and str1[index] == str2[index]:
index += 1
prefixList = str1[:index]
return prefixList
def longestCommonPrefix(self, strs: List[str]) -> str:
if not strs:
return ""
else:
count = len(strs)
prefixList = strs[0]
for i in range(1, count):
if prefixList:
prefixList = self.findPrefix(prefixList, strs[i])
else:
break
return prefixList