LeetCode刷题记8
14. 最长公共前缀
题目
我的代码,我决定一边写一边计时
ok,九分十一秒,我就写了最蠢笨的那个代码
class Solution {
public String longestCommonPrefix(String[] strs) {
if (strs.length == 0) return "";
String ans = "";
for (int i = 0; ; i ++) {
if (strs[0].length() <= i) break;
char ch = strs[0].charAt(i);
int f = 0;
for (int j = 1; j < strs.length; j ++) {
if (strs[j].length() <= i || strs[j].charAt(i) != ch) {
f = 1;
break;
}
}
if (f == 1) {
break;
} else {
ans += ch;
}
}
return ans;
}
}
因为第一次没有判断数组为空的情况下还错了一次。
而且因为把strs[0].charAt(i)写成strs[0].charAt[I]导致编译失败,我简直蠢透了。
再来一次
没有找到两个字符串求公共前缀的已经可以直接用的(我估计是有的),就先自己写了。
class Solution {
public String commonPrefix(String a, String b) {
String ans = "";
for (int i = 0; i < Math.min(a.length(), b.length()); i ++) {
char chA = a.charAt(i);
char chB = b.charAt(i);
if (chA == chB) {
ans += chA;
} else {
return ans;
}
}
return ans;
}
public String longestCommonPrefix(String[] strs) {
Arrays.sort(strs);
int len = strs.length;
if (len == 0) return "";
return commonPrefix(strs[0], strs[len - 1]);
}
}
呼呼,自以为很棒棒~但是
第二次复杂度应该是O(NlogN),比第一次O(N^2)应该是要好的。
看看别人的
class Solution {
public String longestCommonPrefix(String[] strs) {
if (strs.length==0) return "";
if (strs.length==1) return strs[0];
int len = strs.length;
Arrays.sort(strs);
StringBuilder sb = new StringBuilder();
for(int i = 0; i< strs[0].length(); i++){
if (strs[len-1].charAt(i)==strs[0].charAt(i)) sb.append(strs[0].charAt(i));
else return sb.toString();
}
return sb.toString();
}
}
作者:yi-shun-niu-xing
链接:https://leetcode-cn.com/problems/longest-common-prefix/solution/xin-qi-de-pai-xu-suan-fa-by-yi-shun-niu-xing/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。**
这不是和我一样一样的吗。可是凭什么。。。
经过实验发现好像是因为StringBuilder的原因。有点神奇。
做这个题目的时候急着回寝室了,写了乱七八糟的东西,没有什么干货,算了,回去了,明天再说。