leetCode第十四题,最长公共前缀(Longest Common Prefix),JavaScript实现

文章围绕LeetCode第十四题最长公共前缀展开,介绍了双重for循环、双指针和二分查找三种解题方法。双指针解法是逐个遍历元素字符进行拼接;二分查找可降低时间复杂度。同时提醒注意判断数组中有无空字符串。代码存于GitHub。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文章的代码存放在GitHub上,点击地址即可查看源码:最长公共前缀

        下面刷题刷到第十四题,最长公共前缀。先来看看题目:

         这道题里我们的函数会接收到一个字符串类型的数组,然后在这些字符串中找到公共的最长前缀。乍一看直接双重for循环撸就完事了。不过嘛除了双重for循环,我们可以用到双指针来求解。

        我的解法思路是这样的,首先判断第一个元素是否是个空字符,如果是的话就直接返回空字符,不是的话用一个变量来储存第一个元素的一个字符,然后逐个元素遍历当前下标的字符是否一样,一样就拼接到一个变量上,不一样则返回拼接变量。变量到最后一个元素的时候我们让字符串指针归零,字符指针加一继续进行下一轮遍历,直到找出最长公共前缀为止,代码如下:

        不过做为这道题后我想其实可以利用二分查找来解题,如果用到二分查找的话时间复杂度就会变成O(logn),比我的O(m*n)的时间复杂度更少。二分查找的解题思路是这样的,随机用一个元素的的中间值和下标作比对值,这里我们用第一个元素的中间值,然后递归循环比较当前下标里每个元素的字符是否相等,如果是则对右边继续递归,不是则对左边继续递归,当起始下标大于结束下标的时候递归结束返回一个字符串,方法如下:

        本题有个地方要注意的是空字符也是一个字符串,要判断当前数组中有无空字符串,有的话则直接返回。说实话,好像中文版的运行时间好像普遍比国际版的运行时间慢,不知道什么原因。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值