- 最长公共前缀
最长公共前缀
1.解法1
package LeetCode;
class Solution {
public static void main(String[] args) {
Solution s = new Solution();
String[]strs={"flower","flow","flight"};
String result=s.longestCommonPrefix(strs);
System.out.println(result);
}
public String longestCommonPrefix(String[] strs) {
if(strs==null||strs.length==0) return "";
if(strs.length==1) return strs[0];
String first=strs[0]; // strs = ["flower","flow","flight"] strs[0]="flower"
int max=first.length() -1; //最后一个相同的char的index
for (int i = 1; i <strs.length ; i++) { //strs[1]="flow"
String curr=strs[i];
max=Math.min(curr.length()-1,max); //"flower","flow" 选择较短的字符串
for (int j = 0; j <=max ; j++) { //j从0开始,j<=max
if (curr.charAt(j) != first.charAt(j)) {
if (j == 0) {
return "";
} else {
max = j - 1;
break;
}
}
}
}
return first.substring(0,max+1) ; // [),所以这里max+1
}
}
解法2.Comparator
package LeetCode;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
class Solution {
public class MyComparator implements Comparator<String>{
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2); //lexicographically ,按字典顺序
}
}
public static void main(String[] args) {
Solution s = new Solution();
String[]strs={"flower","flow","flight"};
String result=s.longestCommonPrefix(strs);
System.out.println(result);
}
public String longestCommonPrefix(String[] strs) {
if(strs==null||strs.length==0) return "";
if(strs.length==1) return strs[0];
Arrays.sort(strs,new MyComparator()) ;
String first=strs[0],last=strs[strs.length-1];
int len=Math.min(first.length(),last.length());
for (int j=0;j<len;j++){
if (first.charAt(j)!=last.charAt(j)){
return first.substring(0,j); //不包含i, 因为i不等
}
}
// String first=strs[0]; // strs = ["flower","flow","flight"] strs[0]="flower"
// int max=first.length() -1; //最后一个相同的char的index
// for (int i = 1; i <strs.length ; i++) { //strs[1]="flow"
// String curr=strs[i];
// max=Math.min(curr.length()-1,max); //"flower","flow" 选择较短的字符串
// for (int j = 0; j <=max ; j++) { //j从0开始,j<=max
// if (curr.charAt(j) != first.charAt(j)) {
//
// if (j == 0) {
// return "";
// } else {
// max = j - 1;
// break;
// }
//
// }
//
//
// }
// }
// return first.substring(0,max+1) ; // [),所以这里max+1
return first;
}
}