问题描述:
Write a function to find the longest common prefix string amongst an array of strings.
If there is no common prefix, return an empty string “”.
找最长前缀
思路:创建一个类型为char的数组target,首先把strs[0]的每一位copy进去。对于strs中的每一个字符串,与target相比,每次记录下停止的位置stop。如果stop小于0,则退出循环。
后来我看了答案,这个思路和我的一模一样,但是我还是搞复杂了。完全不用转化成char。indexOf会返回含有某子字符串的起始位置,代替了用循环一个一个比较;substring方法可以将目前的前缀结果缩短,也就是说省下了stop指针。
class Solution {
public String longestCommonPrefix(String[] strs) {
String prefix = strs[0];
for (int i = 1; i < strs.length; i++){
while (strs[i].indexOf(prefix) != 0) {
prefix = prefix.substring(0, prefix.length() - 1);
if (prefix.isEmpty()) return "";
}
}
return prefix;
}
}
分治法:
public String longestCommonPrefix(String[] strs) {
return LCP(strs, 0, strs.length-1);
}
public String LCP(String[] strs, int left, int right){
if (left == right){
return strs[left];
}
else{
int middle = (left + right)/2;
String LCP_left_half = LCP(strs, left, middle);
String LCP_right_half = LCP(strs, middle+1, right);
return CP(LCP_left_half, LCP_right_half);
}
}
public String CP(String oneString, String theOtherString){
int length1 = oneString.length();
int length2 = theOtherString.length();
int length = Math.min(length1, length2);
int i=0;
for (; i<length; i++){
if (oneString.charAt(i) != theOtherString.charAt(i)){
break;
}
}
return oneString.substring(0,i);
}
}