【每天学习一点算法2025/12/08】最长公共前缀

每天学习一点算法 2025/12/08

最长公共前缀

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

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

  1. 公共前缀长度肯定是小于最短字符串的,所以我这里先根据字符串长度做了一个排序,找到并遍历最短的字符串,然后跟其他字符串做对比,这样就能得出最长的公共前缀。

    function longestCommonPrefix(strs: string[]): string {
      if (strs.length === 0) return ''
      strs.sort((a, b) => a.length - b.length)
      for(let i = 0; i < strs[0].length; i++) {
        for (let j = 1; j < strs.length; j++) {
          if (strs[j][i] !== strs[0][i]) return strs[0].slice(0, i)
        }
      }
      return strs[0]
    };
    
  2. 上面两种方法其实是一种纵向对比的方法,我们还可以横向对比,遍历数组提取公共前缀,直至遍历完成或者公共前缀为空字符串。

    这里我先写了一个获取公共前缀的方法

    function getCommonPrefix(str1: string, str2: string) {
      let prefix = ''
      const len = Math.min(str1.length, str2.length)
      let index = 0
      while (index < len && str1[index] === str2[index]) {
        prefix += str1[index]
        index++
      }
      return prefix
    }
    
    function longestCommonPrefix(strs: string[]): string {
      if (strs.length === 0) return ''
      let res = strs[0]
      for (let i = 1; i < strs.length; i++) {
        const prefix = getCommonPrefix(res, strs[i])
        if (prefix !== '') {
          res = prefix
        } else {
          return ''
        }
      }
      return res
    }
    
  3. 这里还有一种骚操作就是对字符串数组按字符串进行排序,这里排序的比较时就会默认比较字符串的每一位,我们直接比较排序后数组的第一位和最后一位即可获取到最长公共前缀。

    function longestCommonPrefix(strs: string[]): string {
      if (strs.length === 0) return ''
      strs.sort()
      return getCommonPrefix(strs[0], strs[strs.length -1])
    }
    

题目来源:力扣(LeetCode)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值