LeetCode--14. 最长公共前缀

1,034 阅读1分钟

编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。

示例

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

输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。

错误代码

public String longestCommonPrefix(String[] strs) {
    int index = 0;
    //拿出第一个字符串和后面的比较,有不同直接返回
    for (int i = 0;i<strs[0].length();i++){
        char current = strs[0].charAt(index);
        for (String str:strs){
            if (current!=str.charAt(i)){
                return str.substring(0,index);
            }
        }
        index++;
    }
    return strs[0].substring(0, index);
}
执行错误信息:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
	at Solution.longestCommonPrefix(Solution.java:5)
	at __DriverSolution__.__helper__(__Driver__.java:4)
	at __Driver__.main(__Driver__.java:48)

最后执行的输入:[]

说明没有判断空数组。 加上空数组判断后:

执行错误信息:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 1
	at java.lang.String.charAt(String.java:615)
	at Solution.longestCommonPrefix(Solution.java:11)
	at __DriverSolution__.__helper__(__Driver__.java:4)
	at __Driver__.main(__Driver__.java:48)
最后执行的输入:
["aa","a"]

说明没有考虑后面字符串长度小于前面的情况,所以添加判断如果当前字符串的长度等于i,则返回0到i的数据:str.length()== i,当然,这个判断需要加载char比较之前,因为一旦字符长度不够,编译就会报错下标越界。

Coding

public String longestCommonPrefix(String[] strs) {
    if (strs.length == 0){
        return "";
    }
    int index = 0;
    //拿出第一个字符串和后面的比较,有不同直接返回
    for (int i = 0;i<strs[0].length();i++){
        char current = strs[0].charAt(index);
        for (String str:strs){
            if (str.length()== i || current!=str.charAt(i)){
                return str.substring(0,index);
            }
        }
        index++;
    }
    return strs[0].substring(0, index);
}

总结

像这种比较数据间相同元素的多少,我们就拿数组的第一个元素当模版,和后面的比较做判断然后得出结论。