# Leetcode 14：Longest Common Prefix 最长公共前缀

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: ["flower","flow","flight"]
Output: "fl"
```

Example 2:

```Input: ["dog","racecar","car"]
Output: ""
Explanation: There is no common prefix among the input strings.
```

Note:

All given inputs are in lowercase letters `a-z`.

### 解题思路Java：

```class Solution {
public String longestCommonPrefix(String[] strs) {
int strLen=strs.length;
if(strLen==0) return "";//空字符串组返回""
char[] temp=strs[0].toCharArray();
StringBuilder str = new StringBuilder();
for (int i=0;i<strs[0].length();i++){//以第一个字符串长度开始比较
for (int j=1;j<strLen;j++){
try {
if(temp[i]!=strs[j].charAt(i)){
return str.toString();
}
}catch (IndexOutOfBoundsException e){//抛出错误，这里错误是指索引超出字符串长度
return strs[j];
}
}
str.append(temp[i]);
}
return strs[0];
}
}
```

``` public class Solution {
public String longestCommonPrefix(String[] strs) {
if(strs.length==0) return "";
int min=Integer.MAX_VALUE;
String minStr="";
for(int i=0;i<strs.length;i++){//找出最小长度字符串
if(min>strs[i].length()){
minStr=strs[i];
min=strs[i].length();
}
}
if(min==0) return "";
for(int i=min;i>=0;i--){//最小长度字符串从长到短截取
String standard=minStr.substring(0, i);
int j=0;
for(j=0;j<strs.length;j++){
if(strs[j].substring(0, i).equals(standard)) continue;
else break;
}
if(j==strs.length) return standard;
}
return "";
}
}
```

### 解题思路py3：

```class Solution(object):
def longestCommonPrefix(self, strs):
import os
return os.path.commonprefix(strs)
```

```def commonprefix(m):
"Given a list of pathnames, returns the longest common leading component"
if not m: return ''
# Some people pass in a list of pathname parts to operate in an OS-agnostic
# fashion; don't try to translate in that case as that's an abuse of the
# API and they are already doing what they need to be OS-agnostic and so
# they most likely won't be using an os.PathLike object in the sublists.
if not isinstance(m[0], (list, tuple)):
m = tuple(map(os.fspath, m))
s1 = min(m)
s2 = max(m)
for i, c in enumerate(s1)://枚举得到s1的每一个字符及其索引
if c != s2[i]:
return s1[:i]
return s1
```

0 条评论

• ### # Leetcode 14：Longest Common Prefix 最长公共前缀

Write a function to find the longest common prefix string amongst an array of st...

• ### LeetCode 29：验证二叉搜索树 Validate Binary Search Tree

Given a binary tree, determine if it is a valid binary search tree (BST).

• ### # Leetcode 14：Longest Common Prefix 最长公共前缀

Write a function to find the longest common prefix string amongst an array of st...

• ### 【LeetCode】（No.014）最长公共前缀

最长公共前缀指的是字符串数组中所有公共最长的前缀。 如果是空串的话，那么说明前缀就是“” 如果都是以“ ”开头的，那么就是“ ” 然后最长的前缀不会超过最短的字...

• ### Python函数（一）之杵臼之交

函数的结构： 　　　　　　def 函数名():      　　　　　　 函数体    　　　　　　   return语句

• ### 人人都能学会的python编程教程12：函数的参数

Python的函数定义非常简单，也非常灵活。除了正常定义的必选参数外，还可以使用默认参数、可变参数和关键字参数，使得函数定义出来的接口，不但能处理复杂的参数，还...

• ### 宝宝都能学会的python编程教程12：函数的参数

Python的函数定义非常简单，也非常灵活。除了正常定义的必选参数外，还可以使用默认参数、可变参数和关键字参数，使得函数定义出来的接口，不但能处理复杂的参数，还...

• ### 干货｜一文搞定pandas中数据合并

在实际处理数据业务需求中，我们经常会遇到这样的需求：将多个表连接起来再进行数据的处理和分析，类似SQL中的连接查询功能。

• ### python 引用传递和值传递详解(实参,形参)

python中函数参数是引用传递（不是值传递）。对于不可变类型，因变量不能被修改，所以运算时不会影响到变量本身；而对于可变类型来说，函数体中的运算有可能会更改传...