java 力扣 14. 最长公共前缀
题目
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
例子:
输入: ["flower","flow","flight"]
输出: "fl"
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
解决方案:
方法一
利用函数:startsWith
我就是利用这个函数从原有的耗时3ms到0ms;
public String longestCommonPrefix(String[] strs) {
if(strs.length == 0){
return "";
}
//先找到长度最小值
int sum=strs[0].length();
int index=0;
for (int i = 0; i < strs.length; i++) {
if(sum>strs[i].length()) {
sum=strs[i].length();
index=i;
}
}
//进行比较前缀是否相同。如果不同就对str进行截取
String str = strs[index];
for(int i = 0; i < strs.length; i++){
while(!strs[i].startsWith(str)){
str=str.substring(0,str.length()-1);
}
}
return str;
}
这个函数我从他们评论里面看到的。
方法二:
我第一次执行的代码:用时3ms,感觉好慢。
public String longestCommonPrefix(String[] strs) {
StringBuilder strbu = new StringBuilder();
int count = 0;
if (strs.length > 0) {
int sum = strs[0].length();
int index = 0;
for (int i = 0; i < strs.length; i++) {
if (sum > strs[i].length()) {
sum = strs[i].length();
index = i;
}
}
String str1 = strs[index];
char[] cgars = str1.toCharArray();
for (int i = 0; i < cgars.length; i++) {
int k = 0;
for (int j = 0; j < strs.length; j++) {
char[] charss = strs[j].toCharArray();
if (charss[i] == cgars[i]) {
k += 1;
} else {
count += 1;
break;
}
}
if (k == strs.length) {
strbu.append(cgars[i]);
}
if (count > 0) {
break;
}
}
}
return strbu.toString();
}
如果要更加详细的话可以参考:https://blog.csdn.net/ZeromaXHe/article/details/89424271
总结: 活到老学到老啊。果然还有更优秀的代码。
如果有错误或者还有更优秀的请留言,谢谢。