您的位置:首页 > 编程语言 > Java开发

Longest Common Prefix leetcode java

2017-08-24 16:01 323 查看
题目:

Write a function to find the longest common prefix string amongst an array of strings.

 

题解:

解题思路是,先对整个String数组预处理一下,求一个最小长度(最长前缀肯定不能大于最小长度)。

然后以第0个字符串作为参照,从第1个字符串到最后一个字符串,对同一位置做判断,有不同字符串返回当前记录的字符串就行。

 

我的代码如下,不是那么简洁好看,下面有个整理的更好一些:

private static int MinLength(String[] strs) {
int temp = Integer.MAX_VALUE;
for(int i=0; i<strs.length;i++){
if(temp>strs[i].length())
temp = strs[i].length();
}
return temp;
}

public static String longestCommonPrefix(String[] strs) {
if(strs.length==0){
return "";
}
int j = 0;
boolean flag = false;

int length = MinLength(strs);

while(j<length){
int i = 1;
while(i<strs.length){
int c = strs[0].charAt(j);
if(strs[i].charAt(j)==c){
i++;
}else{
flag = true;
break;
}
}
if(flag)
break;
j++;
}

return strs[0].substring(0, j);
}

更简洁的代码: 

private int minlen(String[] strs) {
int min = Integer.MAX_VALUE;
for(int i=0; i<strs.length;i++)
min = Math.min(min,strs[i].length());
return min;
}

public String longestCommonPrefix(String[] strs) {
if (strs == null || strs.length == 0)
return "";

StringBuilder res = new StringBuilder();
int index = 0;
int len = minlen(strs);
while (index < len){
for (int i=1; i<strs.length;i++){
if (strs[i].charAt(index) != strs[0].charAt(index))
return res.toString();
}
res.append(strs[0].charAt(index));
index++;
}
return res.toString();
}


Reference:http://blog.csdn.net/linhuanmars/article/details/21145733

 -------------------

 更新

 

 空间复杂度更小的代码如下(from discussion):
public String longestCommonPrefix(String[] strs) {
if(strs.length == 0||strs == null)
return "";

for(int i = 0; i<strs[0].length(); i++){
char x = strs[0].charAt(i);
for(int j = 1; j<strs.length; j++){
if(strs[j].length() == i || strs[j].charAt(i) != x)
return strs[0].substring(0,i);
}
}

return strs[0];
}

更新:来自LeetCode大神的解答

public String longestCommonPrefix(String[] strs) {
if(strs == null || strs.length == 0) return "";
String pre = strs[0];
int i = 1;
while(i < strs.length){
while(strs[i].indexOf(pre) != 0)
pre = pre.substring(0,pre.length()-1);
i++;
}
return pre;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: