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

   本博客的作者与csdn里 Tank_in_the_street的作者是同一作者,转载文章需写明出处。

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

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


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

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


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


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

上一题: leetCode第十二题和十三题,整数与罗马数的相互转换,JavaScript实现 


转载于:https://juejin.im/post/5ce006d3e51d4510b436ff1f

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值