编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 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>
结果
每天进步1%,坚持学习。只要你一刻不停,坚持下去,你将难以想象自己能取得多么伟大的成就。欢迎和椰子一起交流,克服懒惰。
閱讀更多 努力的椰子 的文章