题目:14. 最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 " "。
示例 1:
输入:strs = [“flower”,“flow”,“flight”
输出:“fl”
示例 2:
输入:strs = [“dog”,“racecar”,“car”]
输出:""
解释:输入不存在公共前缀。
提前说,我先用了一个Arrays工具类中的自定义比较方法,通过字符串数组中元素长度进行排序,这样就大大降低了后面进行判断是否是该前缀时,所引发的空指针异常和字符串下标越界异常的可能。
直接看代码:
class Solution {
public String longestCommonPrefix(String[] strs) {
//默认空字符串数组无公共前缀
if(strs.length==0){
return "";}
//默认字符串数组只有一个元素时,该元素就是他的公共前缀
if(strs.length==1){
return strs[0];}
//根据数组中字符串的长度进行排序
Arrays.sort(strs, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
// TODO Auto-generated method stub
return o1.length()>=o2.length()?1:-1;
}
});
//创建公共前缀的字符串并赋值为strs数组第一个元素
String CommonPrefix=strs[0];
//从数组的第二个(即下标为1)元素开始遍历
for(int i=1,len=strs.length;i<len;i++) {
//如果该元素只有一个字符,并且与公共前缀CommonPrefix不同,返回空字符串
if(strs[i].length()==1 && !CommonPrefix.equals(strs[i])) {
return "";
}
//判断该元素是否以该公共前缀开始,若不是
if(!strs[i].startsWith(CommonPrefix)) {
//遍历该元素,至公共前缀的长度
for(int k=0;k<CommonPrefix.length();k++) {
//判断第k为字符是否与公共前缀第k为相同,若不同
if(strs[i].charAt(k)!=CommonPrefix.charAt(k)) {
//截取该元素的前k位传给公共字符串
CommonPrefix=strs[i].substring(0,k);
}
}
}
}
//返回公共前缀
return CommonPrefix;
}
}
最后附上题目链接:14. 最长公共前缀