最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串
""
。示例 1:
输入:strs = ["flower","flow","flight"] 输出:"fl"示例 2:
输入:strs = ["dog","racecar","car"] 输出:"" 解释:输入不存在公共前缀。
方法一 纵向扫描
import java.util.Arrays;
class Solution {
public String longestCommonPrefix(String[] strs) {
int[] len_arr = new int[strs.length];
for (int i = 0; i < strs.length; i++) {
len_arr[i] = strs[i].length();
}
Arrays.sort(len_arr);
int index = 0;
for (int i = 0; i < strs.length; i++) {
if (len_arr[0] == strs[i].length()) {
index = i;
break;
}
}
int common_length = len_arr[0];
boolean flag = true;
String common_prefix = "";
while (flag) {
if (common_length == 0) {
flag = false;
common_prefix = "";
break;
}
common_prefix = strs[index].substring(0, common_length);
for (int k = 0; k < strs.length; k++) {
if (! strs[k].startsWith(common_prefix)) {
break;
}
if (strs[k].startsWith(common_prefix) && k == strs.length - 1) {
flag = false;
break;
}
}
common_length--;
}
return common_prefix;
}
}
方法二 横向扫描
class Solution {
public String longestCommonPrefix(String[] strs) {
if (strs == null || strs.length == 0) {
return "";
}
String longest_common_prefix = strs[0];
for (int i = 1; i < strs.length; i++) {
String s2 = strs[i];
longest_common_prefix = longestCommonPrefix(longest_common_prefix, s2);
}
return longest_common_prefix;
}
public String longestCommonPrefix(String prefix, String s2) {
int length = Math.min(prefix.length(), s2.length());
int index = 0;
while (index < length && prefix.charAt(index) == s2.charAt(index)) {
index++;
}
return prefix.substring(0, index);
}
}