最长公共前缀
1.问题描述
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明:所有输入只包含小写字母 a-z 。
2.求解
常规解法
取出第一个字符串,依次遍历整个数组,与第一个字符串比较。
代码如下
public String longestCommonPrefix(String[] strs) {
if(strs.length == 0){
return "";
}
String s = strs[0];
for (int i = 1; i < strs.length; i++) {
int index = getStr(s, strs[i]);
if (index == 0) {
return "";
}
s = s.substring(0, index);
}
return s;
}
public int getStr(String str1, String str2) {
int index = 0, m = str1.length(), n = str2.length();
if (m > n) {
m = str2.length();
}
for (int i = 0; i < m; i++) {
if (str1.charAt(index) == str2.charAt(index)) {
index++;
} else {
break;
}
}
return index;
}
- 时间复杂度 O(mn),其中 m是字符串数组中的字符串的平均长度,n 是字符串的数组的长度。
- 空间复杂度 O(1)
解法二
/*
执行用时:0 ms, 在所有 Java 提交中击败了100.00% 的用户
内存消耗:36.5 MB, 在所有 Java 提交中击败了79.44% 的用户
*/
public String longestCommonPrefix(String[] strs) {
if(strs.length == 0){
return "";
}
String str = strs[0];
for(int i = 1; i < strs.length; i++){
if(str.length() == 0){
return "";
}
while(!strs[i].startsWith(str)){
str = str.substring(0, str.length() - 1);
}
}
return str;
}

编写一个函数来查找字符串数组中的最长公共前缀。
浙公网安备 33010602011771号