LeetCode #14 Longest Common Prefix 最长公共前缀 解题小节

1 题目理解

题目的理解就是给定一堆字符串,从中找出最长的公共前缀。前缀是什么?可以理解为一个字符串开头的几个字母,那么公共前缀,就是这一堆字符串开头的前几个(前缀)的最大相同长度是多少。。。就是所有字符串都有的共同的开头。

这道题我给了两个解题方式:
1、设index=0,遍历每一个字符串,看他们的第index位是否和第1个字符串的第index个相同,如果全部都相同,index++,进入下一路,如果有一个不相同了,那么久直接返回index,index就是最长的公共前缀的长度

2、第二种解法,首先找出第一个和第二个的最长公共前缀为lastprefix,然后用这个lastprefix去和第三个比,找到一个新的lastprefix。。。
这样就避免了很多无谓的比较。

PS:
1、按照我的惯例,可以把String提前改变成Char[],我觉得可能会快些。。只是我觉得。。没测试过。。
2、还是少用String可以提升速度。。不过一般情况下,还是String快。。这也没必要太纠结

2 原题

Longest Common Prefix
Write a function to find the longest common prefix string amongst an array of strings.

3 AC解(Java) 两方法

public class Solution {
    /**
     * 直接循环比较就好了,循环比较
     * */
    public String longestCommonPrefix2(String[] strs) {
        if(strs.length<1)
            return "";
        int count=0,i=0,j,n=strs[0].length();
        for(j=1;j<strs.length;j++){
            n=Math.min(n,strs[j].length());
        }
        for(i=0;i<n;i++){
            for(j=1;j<strs.length;j++){
                if(strs[j].charAt(i)!=strs[0].charAt(i)){
                    return strs[0].substring(0,count);
                }
            }
            count++;
        }
        return strs[0].substring(0,count);

    }
    /**
     * 先比较第一和第二,再用这个结果去比较第三,然后第四,减少比较次数
     * */
        public String longestCommonPrefix(String[] strs) {
        if(strs.length<1)
            return "";
        int lastsame=strs[0].length(),i=1,j;
        char chars[]=strs[0].toCharArray();
        while(i<strs.length){
            lastsame=Math.min(lastsame,strs[i].length());
            j=0;
            for(j=0;j<lastsame;j++){
                if(chars[j]!=strs[i].charAt(j)){
                    lastsame=j;
                    break;
                }
            }
            i++;
        }
        return strs[0].substring(0,lastsame);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值