每日一题02:找出字符串数组中的最长公共前缀

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

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

示例 1:

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

输出: "fl"

示例 2:

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

输出: ""

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

说明:

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

解题思路

1、公共前缀的概念是只字符串开头重复的部分,所有字符串中最长的前缀是数组中字符串最短字符串。

2、然后判断字符串在数组中所有字符串中的首次出现的位置,如果位置存在位置不是0的情况,则不符合,去掉目标字符串最后一位,再次比较,直到找出完全匹配的结果

3、如果没有任务匹配结果,则字符串长度为空串。

4、异常判断:输入的字符串数组长度为0,输入数组中最短字符串长度为0的情况,则返回空串

代码函数

public String longestCommonPrefix(String[] strs) {
String result = "";
//遍历数组找到数组中,字符串长度最短的的串
if(strs.length<=0){
\treturn result;
}
int length = strs[0].length();
String str = "";
for(int i=0;i<strs.length> \tlength = length < strs[i].length()?length:strs[i].length();
\tstr = length < strs[i].length()?str:strs[i];
}
if(length == 0){
\treturn result;
}
//把最短的字符串与其他字符串进行indexof 操作,如果所有字符串都包含则为最长字符串,如果不存在,则缩短字符串,然后继续尝试
for(int j=length;j>0;j--){
\tint m = 0;
\tboolean flag = true;
\t\tString u = str.substring(m, m+j);
\t\tfor(String h : strs){
\t\tif(h.indexOf(u) != 0){
\t\t\tflag = false;
\t\t\tbreak;
\t\t}
\t}
\t\tif(flag){
\t\t\tresult = u;
\t\t\tbreak;
\t\t}
}
return result;
}
/<strs.length>

结果

每日一题02:找出字符串数组中的最长公共前缀


每日一题02:找出字符串数组中的最长公共前缀

每天进步1%,坚持学习。只要你一刻不停,坚持下去,你将难以想象自己能取得多么伟大的成就。欢迎和椰子一起交流,克服懒惰。


分享到:


相關文章: