java显示最长共同前缀_最长公共前缀(java实现)

编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 ""。

示例 1:

输入:["flower","flow","flight"]

输出: "fl"

示例 2:

输入:["dog","racecar","car"]

输出: ""

解释: 输入不存在公共前缀。

说明:

所有输入只包含小写字母 a-z 。

分析:

1.数组中放的是字符串,每个字符串也有自己的长度

2.需要找到数组中最短的字符串,因为其他字符超了的不可能和这个字符再有交集

3.定1,让后面的字符和第一个字符的每一个元素比较,相同的返回。

代码如下:

class Solution {

public String longestCommonPrefix(String[] strs) {

if(strs == null || strs.length == 0){

return "";

}

if(strs.length == 1){

return strs[0];

}

int len = strs[0].length();

for(String str:strs){

len = Math.min(len,str.length()); //得到字符数组里面最短字符的长度

}

if(len == 0){ //其中的一个字符为空的情况

return " ";

}

StringBuffer res = new StringBuffer(len);

//每个字符只需要遍历到最小长度即可,因为大于最小长度字符的那一部分不可能有公共

for(int j = 0; j < len;j++){

for(int t= 0;t < strs.length;t++){

if(strs[t].charAt(j) != strs[0].charAt(j)){ //每个与第一个字符开始比较,也就是与下标为0的字符的元素比较。

return res.toString();

}

}

res.append(strs[0].charAt(j)); //相同就加进结果集

}

return res.toString();

}

}

我在LeetCode看到一种解法,时间复杂度看着很小,因为它利用了Java特有的函数。但是函数内部的时间复杂度就不明而已了。这个代码也是比较简洁的。我们来看看:

代码如下:

class Solution {

public String longestCommonPrefix(String[] strs) {

String ret = "";

if(strs.length == 0) return ret;

if(strs.length == 1) return strs[0];

ret = strs[0];

for(int i = 1; i < strs.length; i++){

while (!strs[i].startsWith(ret)){ //判断与第一个元素的相同字符

ret = ret.substring(0, ret.length()-1);

if (ret.length() == 0){

return "";

}

}

}

return ret;

}

}

你可能感兴趣的:(java显示最长共同前缀)