题目描述
Write a function to find the longest common prefix string amongst an array of strings.
- 思路
求最长公共子序列。
法一:利用冒泡排序找出字典序差别最大的两个串,求其最长公共子序列即可。
法二:以第一个串为最长前缀,其他串依次判断其是否为前缀,不是则切割最后一位继续比较,直到满足后接着比较下一个串。全部比较完成后的第一个串即为最长公共前缀。
public class Solution {
public String longestCommonPrefix(String[] strs) {
if(strs == null || strs.length < 1)
return "";
if(strs.length < 2)
return strs[0];
int len = strs.length;
for(int i=0; i<len-1; i++){ //把最大的移到最后面
if(strs[i].compareTo(strs[i+1]) > 0){
String t = strs[i];
strs[i] = strs[i+1];
strs[i+1] = t;
}
}
for(int i=0; i<len-2; i++){ //把最小的移到倒数第二位置
if(strs[i].compareTo(strs[i+1]) < 0){
String t = strs[i];
strs[i] = strs[i+1];
strs[i+1] = t;
}
}
String str = "";
String s1 = strs[len-1];
String s2 = strs[len-2];
for(int i=0; i<Math.min(s1.length(), s2.length()); i++){
if(s1.charAt(i) == s2.charAt(i)){
str += s1.charAt(i);
}else{
break;
}
}
return str;
}
}
public class Solution {
public String longestCommonPrefix(String[] strs) {
if(strs == null || strs.length < 1)
return "";
String str = strs[0];
for(int i=1; i<strs.length; i++){
if( !strs[i].startsWith(str)){
str = str.substring(0, str.length()-1);
i --;
}
}
return str;
}
}