题目描述
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入:strs = [“flower”,“flow”,“flight”] 输出:“fl”
来源:力扣(LeetCode)
链接:LeetCode
题目分析
(1)考虑上述事例,如果用人工方法找公共前缀,我们通常的做法是,看前两个字符串的公共前缀,得到前缀为flow,然后用这个前缀flow继续与第三个比较,得到最终结果为fl;
(2)算法也是一样的流程,因此需要解决两个问题,第一是如何求得公共前缀,第二是如何遍历字符串数组;
(3)求公共前缀就是求从第一个字符开始的公共子串,编写一个求两个字符串公共子串的方法,逐一比较字符即可;
(4)遍历数组:从数组第二个字符串开始遍历,其与第一个字符串的公共前缀再作为新字符串去与第三个字符串求公共前缀,以此遍历下去。
代码
class Solution {
public String longestCommonPrefix(String[] strs) {
if(strs.length==0) return "";
if(strs.length==1) return strs[0]; //考虑两种特殊情况
String profix=strs[0];
for(int i=1;i<strs.length;i++){
profix=longestCommonStr(profix,strs[i]); //逐个遍历数组,将前面的公共前缀继续与后面的字符串求公共前缀
if(profix==null)
break;
}
return profix;
}
public String longestCommonStr(String str1,String str2){
int len = Math.min(str1.length(),str2.length());
int index=0;
while(index<len&&str1.charAt(index)==str2.charAt(index)) ++index;
//求公共字符串,当对应位置字符不等时退出循环
return str1.substring(0,index);
}
}