- 问题描述:
编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。 示例 1: 输入:strs = ["flower","flow","flight"] 输出:"fl" 示例 2: 输入:strs = ["dog","racecar","car"] 输出:"" 解释:输入不存在公共前缀。 提示: 1 <= strs.length <= 200 0 <= strs[i].length <= 200 strs[i] 仅由小写英文字母组成
解题方法1:
若存在公共前缀,则每个字符串都以指定的前缀开头;若不存在公共前缀,则存在字符串的前缀与其它字符串不同。选定一个字符串,取出前缀字符与其它字符串进行比较,获取结果。
代码:
if (strs.length == 0) {
return "";
}
String fi = "";
int length_1 = strs[0].length();
int length_2 = strs.length;
for(int i = 0;i < length_1;i++){
String s = strs[0].substring(0,i + 1);
for(int j = 1;j < length_2;j++){
if(!strs[j].startsWith(s)){
return fi;
}
}
fi = s;
}
return fi;
运行结果:
可以看出这种方法的效率并不高。
解题方法2:
- 使第一个字符串为初始字符串
- 遍历之后的字符串,分别两两找出最长的公共前缀,最后得到我们需要找的公共前缀
图解:
代码:
if (strs.length == 0) {
return "";
}
String fi = "";
String ans = strs[0];
int length = strs.length;
for (int i = 1; i < length; i++) {
int j = 0;
for (; j < ans.length() && j < strs[i].length(); j++) {
if (ans.charAt(j) != strs[i].charAt(j))
break;
}
ans = ans.substring(0, j);
if (ans.equals(""))
return ans;
}
return ans;
执行结果:
在执行效率上提高了一点。