找出字符串数组中最长的公共字符前缀
如果,没有公共字符前缀的话就返回空字符串""
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.
注意:所有输入字符串均为小写"a-z"
1:先将字符串列表按长度从小到大排列,然后以最小的字符串为标准进行单个字符比较。时间复杂度:n(o^2)
def longestCommonPrefix(self, strs):
"""
:type strs: List[str]
:rtype: str
"""
if len(strs)==0:
return ""
strs.sort(key=len)
for i in range(len(strs[0])):
for j in range(1,len(strs)):
if strs[0][i] != strs[j][i]:
return strs[0][0:i]
return strs[0]
2:取出字符串集合中最小和最大的字符串,遍历小字符串和大字符串做比较,输出相应结果。
def longestCommonPrefix(self, strs):
"""
:type strs: List[str]
:rtype: str
"""
if not strs:
return ""
min_str = min(strs)
max_str = max(strs)
for i, j in enumerate(min_str):
if j != max_str[i]:
return min_str[:i]
return min_str
上面是 python 实现,下面是 java 实现的版本
public String longestCommonPrefix(String[] strs) {
if (strs == null || strs.length == 0) {
return "";
}
String min = strs[0];
String max = strs[0];
for (int i = 1; i < strs.length; i++) {
//若Str1等于参数字符串Str2字符串,则返回0;若该Str1按字典顺序小于参数字符串Str2,
// 则返回值小于0;若Str1按字典顺序大于参数字符串Str2,则返回值大于0。
if (min.compareTo(strs[i]) > 0) {
min = strs[i];
}
if (max.compareTo(strs[i]) < 0) {
max = strs[i];
}
}
for (int i = 0; i < min.length(); i++) {
if (min.charAt(i) != max.charAt(i)) {
return min.substring(0, i);
}
}
return min;
}
以下是 go 实现版本
func longestCommonPrefix(strs []string) string {
if len(strs) == 0 {
return ""
}
min := strs[0]
max := strs[0]
for i := 1; i < len(strs) ;i++ {
if min > strs[i] {
min = strs[i]
}
if max < strs[i] {
max = strs[i]
}
}
for j := 0; j < len(min); j++ {
if min[j] != max[j] {
return min[0:j]
}
}
return min
}
算法题来自:https://leetcode-cn.com/problems/longest-common-prefix/description/