LeetCode javascript解题心得 第14题 最长公共前缀

题目如下:

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

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

示例 1:

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

示例 2:

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

解题思路:

这道题的示例误导性极强,让我以为只有固定三个输入,结果最后执行它会给出只有两个成员的数组。当我修改完之后,又出现了四个成员的数组,体会一下我当时的绝望。

首先看我之前错误的代码

var longestCommonPrefix = function(strs) {
    if (strs == null || strs.length == 0) 
        {
            return "";
        }
    var len1=0;
    var len2=0
    var len3=0;                                               这个地方我是默认他只有三个以内的测试用例,所以遭重了。应该先判断数组的长度,然后给如新变量j再去读入数组成员字符串的长度。
    
    if(strs[0]!=null)
        {
            len1=strs[0].length;
        }
    if(strs[1]!=null)
        {
            len2=strs[1].length;
        }
    if(strs[2]!=null)
        {
            len3=strs[2].length;
        }
    
    minlen=len1;
    var real=0;
    if(len2<minlen)                              确定最短字符长度,因为前缀不可能超过字符串本身
        {
            minlen=len2;
        }
    if(len3<minlen&&len3!=0)
        {
            minlen=len3;
        }
    if(strs[1]==null&&strs[2]==null)
        {
            return strs[0];
        }
    
    if(strs[2]==null)
        {
            for(var i=1;i<=minlen;i++)
            {
            if(strs[0].substring(0,i)==strs[1].substring(0,i))                     substring方法就是获取从x到y的字符串比如“”flower“” 0,1就是”f”
                {
                   
                      real=i;
                      
                }
            }
            return strs[0].substring(0,real);
        }

    else
        {
    for(var i=1;i<=minlen;i++)
        {
            if(strs[0].substring(0,i)==strs[1].substring(0,i))                
                {
                    if(strs[1].substring(0,i)==strs[2].substring(0,i))
                        {
                            real=i;
                        }
                }
        }
    
    return strs[0].substring(0,real);
        }
};

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值