LeetCode:最长公共前缀

题目:

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

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

示例 1:

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

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

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

我的答案:

代码如下:

class Solution {
    public String longestCommonPrefix(String[] strs) {
        if(strs==null){
            return null;
        }
        if(strs.length==0){
            return "";
        }
        String result = "";
        if(strs.length==1){
            return strs[0];
        }
        result = strs[0];
        for(int i=1;i<strs.length;i++){
            //这里不能用result==""
            if(result.equals("")){
                return "";
            }
            result=prefix(result,strs[i]);
        }
        return result;
    }
    private String prefix(String s1,String s2){
       
        int len = s1.length()<s2.length()?s1.length():s2.length();
        int i=0;
        while(i<len){
            if(s1.charAt(i)==s2.charAt(i)){
                i++;
            }else{
                break;
            }
        }
        return s1.substring(0,i);
    }
}

官方题解:

        我的答案的思路感觉其实和官方题解的解法一是差不多的,不过我又整复杂了,我单独写了一个prefix函数来找result和后面一个字符串的共同前缀,官方题解的解法一直接用一个while循环来判断了,我没想到用indexOf这个方法的返回值是否为0来判断是否为前缀。

        下面是按官方题解一写的代码:

class Solution {
    public String longestCommonPrefix(String[] strs) {
        if(strs==null){
            return null;
        }
        if(strs.length==0){
            return "";
        }
        String result = strs[0];
        for(int i=1;i<strs.length;i++){
            while(strs[i].indexOf(result)!=0){
                result = result.substring(0,result.length()-1);
                if(result.equals("")){
                    return "";
                }
            }
        }
        return result;
    }
}

作者:LeetCode
链接:链接
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

总结:

扫描二维码关注公众号,回复: 9817974 查看本文章
发布了75 篇原创文章 · 获赞 2 · 访问量 8028

猜你喜欢

转载自blog.csdn.net/wyplj2015/article/details/103074179
今日推荐