Leetcode-14 最长公共前缀

一、题目描述

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

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

示例 1:

输入: [“flower”,“flow”,“flight”]
输出: “fl”

示例 2:

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

说明:

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

二、解题思路

最直接的想法,就是依次比较各个字符串的第一个元素、第二个元素……直到出现不相同的字符,返回前面记录下来的所有字符,简单粗暴。

三、代码

class Solution {
    public String longestCommonPrefix(String[] strs) {
        if(strs.length==0)return "";
        StringBuilder sb=new StringBuilder("");
        int index=0;
        while(index<strs[0].length()){
            char c=strs[0].charAt(index);
            for(int i=0;i<strs.length;i++){
                if(index>=strs[i].length()||strs[i].charAt(index)!=c){
                    return sb.toString();
                }
            }
            sb.append(c);
            index++;
        }
        return sb.toString();
    }
}

四、结果

运行时间 1ms 79.11%
消耗内存 37.5M 45.85%

这种方法虽然简单粗暴但是用时稍微让人不太满意,因此要考虑一下优化的方法。

五、优化

这是看leetcode评论区的一个0ms 100%大神的一个解法,思路简单易懂,先令公共前缀为数组中第一个字符串,然后依次在剩余字符串中查找该前缀第一次出现的位置,只要不是0就将前缀长度-1.不过为什么indexOf方法执行很多次效率还这么高我还没有研究明白。

class Solution {
    public String longestCommonPrefix(String[] strs) {
        if(strs.length==0||strs==null)return "";
        String res=strs[0];//结果
        for(String str:strs){
            while(str.indexOf(res)!=0)res=res.substring(0,res.length()-1);
        }
        return res;
    }
}

六、总结

要去indexOf函数的源码分析。

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 游动-白 设计师: 上身试试
应支付0元
点击重新获取
扫码支付

支付成功即可阅读