Write a function to find the longest common prefix string amongst an array of strings.
翻译:编写一个函数来查找字符串数组中最长的公共前缀字符串。
思路:英语不太好,题意一开始没有理解清楚,错误理解为找出字符串数组中最大的共同前缀,即只要有任意两个满足条件即可,代码如下,由于无法提交进行所有测试,所以代码肯定有错。
public String longestCommonPrefix(String[] strs) {
int strs_len = strs.length;
StringBuilder sb = new StringBuilder("");
int max_len = 0;
for(int i = 0;i<strs_len-1;i++){
char[] a = strs[i].toCharArray();
for(int j = i+1;j<strs_len;j++){
char[] b = strs[j].toCharArray();
int temp_len = 0;
for(int k =0; k<Math.min(a.length,b.length);k++){
if(a[k] == b[k]){
temp_len++;
}else{
break;
}
}
if(temp_len>max_len){
max_len = temp_len;
sb.setLength(0);
sb.append(strs[i].substring(0,max_len));
}
}
}
return sb.toString();
}
提交后发现必须字符串数组中的所有字符串都满足前缀相同的条件,这一来要比原来的问题简单一些,思路为先找到数组中长度最短的字符串并存储其长度,之后以最短字符串为基准,从头开始依次比较所有字符串的字符,若所有字符串相同下标的字符都相等,则计数加一,否则截取字符串并返回。
public String longestCommonPrefix(String[] strs) {
int strs_len = strs.length;
if(strs_len == 0){
return "";
}
int max_len = 0;
int min_str = 0;
int min_str_len = strs[0].length();
/*先找到数组中长度最短的字符串并存储其长度*/
for(int i = 0;i<strs_len;i++){
if(strs[i].length() < min_str_len){
min_str_len = strs[i].length();
min_str = i;
}
}
/*以最短字符串为基准,从头开始依次比较所有字符串的字符,若所有字符串相同下标的字符都相等,则计数加一,否则截取字符串并返回*/
for(int i = 0;i<min_str_len;i++){
char a = strs[min_str].charAt(i);
for(int j = 0;j<strs_len;j++){
char b = strs[j].charAt(i);
if(b != a) {
return strs[min_str].substring(0,max_len);
}
}
max_len++;
}
return strs[min_str].substring(0,max_len);
}