题目:14. 最长公共前缀
思路1:纵向查找。从左至右遍历所有字符串的每一列,如果有不一致就停止。
思路2:分治。所有字符串的公共前缀必定是任意两个字符串的公共前缀的子串,所以就可以采用分治的思想。
代码1:
class Solution {
public String longestCommonPrefix(String[] strs) {
if (strs.length < 1) {
return "";
}
int minLen = Integer.MAX_VALUE;
for (int i = 0; i< strs.length; i++) {
minLen = Math.min(minLen, strs[i].length());
}
String res = "";
for (int i = 0; i < minLen; i++) {
char temp = strs[0].charAt(i);
for (int j = 1; j < strs.length; j++) {
if (strs[j].charAt(i) != temp) {
return res;
}
}
res += temp;
}
return res;
}
}
代码2:
class Solution {
public String longestCommonPrefix(String[] strs) {
if (strs == null || strs.length == 0) {
return "";
}
else {
return longestCommon(strs, 0, strs.length - 1);
}
}
public String longestCommon(String[] strs, int left, int right) {
if (left == right) {
return strs[left];
}
int mid = (left + right) / 2;
String leftCommon = longestCommon(strs, left, mid);
String rightCommon = longestCommon(strs, mid + 1, right);
int len = 0;
String res = "";
while (len < leftCommon.length() && len < rightCommon.length()) {
if (leftCommon.charAt(len) != rightCommon.charAt(len)) {
return res;
}
res += leftCommon.charAt(len);
len++;
}
return res;
}
}