编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入:strs = ["flower","flow","flight"] 输出:"fl"
示例 2:
输入:strs = ["dog","racecar","car"] 输出:"" 解释:输入不存在公共前缀。
提示:
1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i]
仅由小写英文字母组成
思路:我们先将a记作列表的第一个元素的第一个字母,即为f,然后i从1进行循环,后面的每个元素的第一个值即为strs[i][0]都与a进行比较,如果相同,我们让计数器m+1,如果后面的第一个元素都与a相同,m均加一,如果f为我们的前缀,则m的值应该为我们列表的总长度减一,如果是,我们家让字符串b加上我们的a。接下来再用列表的第一个元素的下一个位置进行比较。
例一:输入:strs = ["flower","flow","flight"]
a=strs[0][0]='f' :i从1到2 strs[1][0]=f m=m+1=1 strs[2][0]=f m=m+1=2=len(strs)-1 b=b+a='f'
a=strs[0][1]='l' i 从1到2 strs[1][1]=l m=m+1=1 strs[2][0]=l m=m+1=2=len(strs)-1 b='f'+a='fl'
后面不相同,我们直接break,最终返回b的值
我们可以看出来 a=strs[0][j] j从0到4,因为最多比较次数就是最短元素的长度,当然本例在走到2的时候因为不相同就break掉了。
用到两个循环,j 从0到列表中元素长度的最小值(即flow的长度为4)我们需要注意不能让下标越界,i 从1到 len(strs)
代码:
class Solution(object):
def longestCommonPrefix(self, strs):
b=''
n=len(strs[0])
for i in range(1,len(strs)):
if n>len(strs[i]):
n=len(strs[i])
for j in range(0,n):
m=0
a=strs[0][j]
for i in range(1,len(strs)):
if(strs[i][j]==a):
m=m+1
else:
break
if(m==len(strs)-1):
b=b+a
else:
break
return b
时间复杂度:O(n^2)
空间复杂度:O(1)