题目描述
代码语言:javascript复制编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-common-prefix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法
解法1
我想出的是比较暴力的。。。
代码语言:javascript复制public static String longestCommonPrefix1(String[] strs) {
if (strs.length == 0) return "";
String prefix = "";
for (int i = 1; i < strs[0].length() 1; i ) {
prefix = strs[0].substring(0, i);
for (int j = 0; j < strs.length; j ) {
if (!strs[j].startsWith(prefix)) {
return prefix = strs[0].substring(0, i-1);
}
}
}
return prefix;
}
解法2
代码语言:javascript复制public static String longestCommonPrefix2(String[] strs) {
if (strs.length == 0) return "";
String prefix = strs[0];
for (int i = 1; i < strs.length; i )
while (strs[i].indexOf(prefix) != 0) {
prefix = prefix.substring(0, prefix.length() - 1);
if (prefix.isEmpty()) return "";
}
return prefix;
}
解法3
代码语言:javascript复制public static String longestCommonPrefix3(String[] strs) {
if (strs == null || strs.length == 0) return "";
for (int i = 0; i < strs[0].length() ; i ){
char c = strs[0].charAt(i);
for (int j = 1; j < strs.length; j ) {
if (i == strs[j].length() || strs[j].charAt(i) != c)
return strs[0].substring(0, i);
}
}
return strs[0];
}
解法4
使用二分查找的办法
代码语言:javascript复制public String longestCommonPrefix4(String[] strs) {
if (strs == null || strs.length == 0)
return "";
int minLen = Integer.MAX_VALUE;
for (String str : strs)
minLen = Math.min(minLen, str.length());
int low = 1;
int high = minLen;
while (low <= high) {
int middle = (low high) / 2;
if (isCommonPrefix(strs, middle))
low = middle 1;
else
high = middle - 1;
}
return strs[0].substring(0, (low high) / 2);
}
private boolean isCommonPrefix(String[] strs, int len){
String str1 = strs[0].substring(0,len);
for (int i = 1; i < strs.length; i )
if (!strs[i].startsWith(str1))
return false;
return true;
}
Copyright: 采用 知识共享署名4.0 国际许可协议进行许可 Links: https://cloud.tencent.com/developer/article/2020381