最长公共前缀
说明
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入:strs = ["flower","flow","flight"]
输出:"fl"
示例 2:
输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。
提示:
1 <= strs.length <= 2000 <= strs[i].length <= 200strs[i]仅由小写英文字母组成
来源:力扣(LeetCode)
题解
public static void main(String[] args) {
//编写一个函数来查找字符串数组中的最长公共前缀。
//如果不存在公共前缀,返回空字符串 `""`。
String[] strs = new String[]{"reflower","flow","flight"};
System.out.println(demo(strs));
}
public static String demo(String[] strs){
String str = strs[0];
if(str.length() == 0){
return "";
}
//取得最小的字符串
for (String s : strs) {
if (s.length() < str.length()) {
str = s;
}
}
if(str.length() == 0){
return "";
}
int num = str.length();
for (int i = 0; i < num; i++) {
String substring = str.substring(0, num - i);
boolean flag = true;
for (String s : strs) {
String s2 = s.substring(0, num - i);
if(!substring.equals(s2)){
flag = false;
break;
}
}
if(flag){
return substring;
}
}
return "";
}
增强版
示例 2: 编写一个函数来查找字符串数组中的最长公共字符串。
如果不存在最长公共字符串,返回空字符串 ""。
输入:strs = ["doceg","racecar","cacer"]
输出:"ce"
题解
public static void main(String[] args) {
String[] strs = new String[]{"reflower","flow","flight"};
System.out.println(demo(strs));
}
public static String demo(String[] strs){
String str = strs[0];
if(str.length() == 0){
return "";
}
//取得最小的字符串,为后面减少执行次数
for (String s : strs) {
if (s.length() < str.length()) {
str = s;
}
}
if(str.length() == 0){
return "";
}
int number = str.length();
int i = str.length();
while (number > 0){
int j = 0;
i = i - (i - number);
while (i <= str.length()){
String substring = str.substring(j, i);
if(test(strs,substring)){
return substring;
}
j += 1;
i += 1;
}
number -= 1;
}
return "";
}
public static boolean test(String[] strs,String str){
for (String s : strs) {
if(!s.contains(str)){
return false;
}
}
return true;
}