思路
分析了一下题目
思路1: 横向扫描法
- ①把第一个字符串暂时看做最长公共前缀
- ②在第二个字符串看是否能找到当前最长公共前缀
- ③如果不能找到,将最长公共前缀去掉最后一个,再进行②,
- ④直至匹配成功
- ⑤再循环后面的每个元素,总能找到最长公共前缀,如果中间最长公共前缀为空,直接GG
思路2: 利用Python中zip函数和set
- ①评论区学到的,利用zip函数
- ② 将数组中所有的字符串进行元组化
- ③元组化后,再对每个元组进行set, 就可以看成一个字符串的一个字符
- ④如果set后,长度为 1, 那么就说明这个数组中每个字符串当前位置的字符都相等
思路3: 利用ASCII码
—待补充
编写
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
strsLen = len(strs)
if(strsLen <= 0): return ''
ans = strs[0]
for i in range(1, strsLen):
while(strs[i].find(ans) != 0):
ans = ans[:-1]
if(ans == ''):
return ''
return ans
# 只需要找到最长字符串,最短字符串两者进行比较
def longestCommonPrefix(self, strs: List[str]) -> str:
if not strs: return ""
s1 = min(strs)
s2 = max(strs)
for i,x in enumerate(s1):
if x != s2[i]:
return s2[:i]
return s1
# 评论区学到的,利用zip函数
# 将数组中所有的字符串进行元组化
# 元组化后,再对每个元组进行set, 就可以看成一个字符串的一个字符
# 如果set后,长度为 1, 那么就说明这个数组中每个字符串当前位置的字符都相等
def longestCommonPrefix(self, strs):
prefix = []
for t in zip(*strs):
s = set(t)
if(len(s) == 1):
prefix.append(s.pop())
else:
break
return "".join(prefix)