两种思路:
1、将第一个字符串拿出来,找它和下一个字符串的前缀交集,然后保存;再将保存的字符串和下一个继续进行比较,直到最后结束。
这种方法为横向对比法,效率很低。
2、纵向对比法,先找出最短的字符串,最长公共前缀长度一定小于等于这个字符串的长度。
然后对比每一个字符串的第i个字符是否相等,直到比较到不相等的时候退出循环,返回子串。
代码:
public static String longestCommonPrefix(String[] strs) {
if (strs.length == 0) return "";
String s0 = strs[0];
for (int i = 1; i < strs.length; i++) {
if (strs[i].length() < s0.length()) {
s0 = strs[i];
}
}
int count = strs.length;
int num = 0;
while (count == strs.length && num < s0.length()) {
count = 0;
for (String str : strs) {
if (str.charAt(num) == s0.charAt(num)) {
count++;
}
}
if (count == strs.length) num++;
}
return s0.substring(0, num);
}