思路1:取第二个和第一个比较,找出最长前缀,然后后面的逐渐遍历比较
find函数:str1.find(str2, beg=0, end=len(string))
检查str2
是否在str1
中,找得到返回索引,找不到返回-1
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
if not strs:
return ""
res=strs[0]
i=1
while i<len(strs):
#如果res在s[1]中,那就使res一直减少,直到跳出循环
while strs[i].find(res)!=0:
res=res[0:len(res)-1]
i+=1
return res
class Solution {
public String longestCommonPrefix(String[] strs) {
if(strs==null){
return "";
}
String res=strs[0];
for(String s : strs){
while(!s.startsWith(res)){
if(res==null){//可以省略if,如果res为null,while也为true的
return "";
}else{
res=res.substring(0,res.length()-1);
}
}
}
return res;
}
}
思路2:先排序,直接比较差异最大的第一个和最后一个字符串即可
比思路一快很多
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
if not strs:
return ""
strs.sort()#排序默认按字母大小排
l=len(strs)
first=strs[0]
last=strs[-1]
res=""
for i in range(len(first)):
if i<len(last) and first[i]==last[i]:
res=res+first[i]
else:
break
return res
class Solution {
public String longestCommonPrefix(String[] strs) {
if (strs.length == 0) {
return "";
}
Arrays.sort(strs);
String first=strs[0];
String last=strs[strs.length - 1];
while(!last.startsWith(first)){
first=first.substring(0,first.length()-1);
}
return first;
}
}