1、题意描述
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入:strs = [“flower”,“flow”,“flight”]
输出:“fl”
示例 2:
输入:strs = [“dog”,“racecar”,“car”]
输出:“”
解释:输入不存在公共前缀。
2、解题思路
下面我们使用的方法是,先求第一个和第二个求公共前缀,然后拿上公共前缀去和第三个求公共前缀,依次类推,即可。
3、代码示例
public class LongestCommonPrefix {
public static void main(String[] args) {
LongestCommonPrefix longestCommonPrefix = new LongestCommonPrefix();
String[] strs = {"","fllow","fllight"};
System.out.println(longestCommonPrefix.longestCommonPrefix(strs));
}
public String longestCommonPrefix(String[] strs) {
if(null == strs || strs.length == 0){
return "";
}
// 1、先是第一个和第二个求公共前缀
// 2、取出第一步的结果与第三个求公共前缀
// 3、取出第二步的结果与第四个求公共前缀、
// 4、依次类推
String str1 = strs[0];
int subLength = 0;
String str2 = "";
for(int i = 1; i < strs.length; i++){
str2 = strs[i];
subLength = lcp(str1, str2);
if(subLength == 0){
return "";
}
str1 = str1.substring(0, subLength);
}
return str1;
}
private int lcp(String str1, String str2){
int subLength = 0;
// 当其中有一个字符串为空或者空字符串时,返回0
if(null == str1 || "".equals(str1) ||
null == str2 || "".equals(str2)){
return 0;
}
// 将小的字符串的数组长度给它
int minLength = Math.min(str1.length(), str2.length());
// 求两个字符串之间的最长公共左前缀
for(int index = 0; index < minLength; index++){
if(str1.charAt(index) == str2.charAt(index)){
subLength ++;
continue;
}
break;
}
return subLength;
}
}