Javascript-获取最长公共前缀

一、题目描述

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

二、解题思路

        1.公共前缀肯定来自数组元素的一部分,因此首先可以选择任意一个元素作为匹配的公共前缀字符串。

        2.将当前公共前缀和数组中的元素每一个元素(字符串)比较,每一个元素都是字符串,因此就相当于比较字符串有前几个字符是相同的(公共前缀),然后截取当前公共部分作为当前公共前缀继续与后面的元素的比较;因为公共前缀是大家公共拥有的,所以一遇到不满足,或者需要更短的部分,要及时更新当前公共前缀。

        

三、解题代码

        示例一:

/**
 * @param {string[]} strs
 * @return {string}
 */
var longestCommonPrefix = function(strs) {
    if(strs.length === 0) return ''
    let str = strs[0]
    // 拿第一个字符串和后面的比较
    for(let i = 1;i<strs.length;i++){
        // 与每个字符串的字符比较,直到比较到不一样,然后截取到前面一样的, k < str.length,最长公共前缀
        for(let k = 0;k<str.length;k++){
            //与每个字符比较,获取前面一样的部分
            if(str[k] !== strs[i][k]){
                str = str.slice(0,k)
                break
            }
        }
    }
    return str
};

      代码解析先获取到一个元素字符串作为初始的公共前缀,然后与后面的字符串元素比较,和每个字符串都是从第0个字符开始一个一个比较,直到不相等,然后截取出当前先等的部分作为最新的公共前缀,结束当前元素的比较,继续与下一个字符串比较。

          示例二:

/**
 * @param {string[]} strs
 * @return {string}
 */
var longestCommonPrefix = function(strs) {
    if(strs.length === 0) return ''
    let str = strs[0]
    for(let i = 1;i<strs.length;i++){
        //使用indexOf(str)=== 0 判断str是否属于strs[i]的前面得某一部分,如果不是,缩短str的长度继续判断
        while(strs[i].indexOf(str) !== 0){
            str = str.slice(0,str.length-1)
            if(str.length == 0) return ''
        }
    }
    return str
};

        代码解析:思路和上面的一样,只不过在更新当前公共前缀使用了indexOf()方法,indexOf()会返回目标元素第一次出现的位置。若strs[i].indexOf(str) === 0,说明str是strd[i]的前面部分,即公共前缀。如果不等于0,说明前面匹配不到str,缩短str的长度,继续比较,直到有公共的部分,如果str.length === 0,说明没有str为空也没有找到公共的部分,就是没有公共前缀,直接return '' 。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值