题目
Write a function to find the longest common prefix string amongst an array of strings.
1 思路很简单,从数组中找出最小字符串,然后根据最小字符串来匹配全部字符串的前缀。
2 如果需要优化,可以在遍历最小字符串的前缀的时候使用半分法。
3 难点在于,字符串的length和数组的length混在一起,数组下标[]和方法()混在一起,容易写错。
public class Solution {
public String longestCommonPrefix(String[] strs) {
if(strs.length==0){
return "";
}
int num = strs.length;
int shortestlength = strs[0].length();
int shortindex = 0;
for(int i=0;i<num;i++){
int ln = strs[i].length();
if(ln<shortestlength){
shortestlength= ln;
shortindex = i;
}
}
String shortestString = strs[shortindex];
while(shortestlength>0){
String sub = shortestString.substring(0,shortestlength);
int i;
for(i=0;i<num;i++){
if(!strs[i].substring(0,shortestlength).equals(sub)){
break;
}
}
if(i==num){
break;
}
else{
shortestlength--;
}
}
return shortestString.substring(0,shortestlength);
}
}
15.3.17
public class Solution {
public String longestCommonPrefix(String[] strs) {
if(strs == null ){
return null;
}
int n = strs.length;
String minStr = "";
int minLength = Integer.MAX_VALUE;
for(int i=0;i<n;i++){
if(strs[i].length()<minLength){
minLength = strs[i].length();
minStr = strs[i];
}
}
for(int i=0;i<minStr.length();i++){
char cur = minStr.charAt(i);
for(int j=0;j<n;j++){
if(strs[j].charAt(i)!=cur){
return minStr.substring(0,i);
}
}
}
return minStr;
}
}
注意JAVA的substring(startIndex,endIndex)和 substring(startindex)