leetCode第十四題,最長公共前綴(Longest Common Prefix),JavaScript實現

   本博客的做者與csdn裏 Tank_in_the_street的做者是同一做者,轉載文章需寫明出處。

本文章的代碼存放在GitHub上,點擊地址便可查看源碼:最長公共前綴git

下面刷題刷到第十四題,最長公共前綴。先來看看題目:
github


這道題裏咱們的函數會接收到一個字符串類型的數組,而後在這些字符串中找到公共的最長前綴。乍一看直接雙重for循環擼就完事了。不過嘛除了雙重for循環,咱們能夠用到雙指針來求解。數組

個人解法思路是這樣的,首先判斷第一個元素是不是個空字符,若是是的話就直接返回空字符,不是的話用一個變量來儲存第一個元素的一個字符,而後逐個元素遍歷當前下標的字符是否同樣,同樣就拼接到一個變量上,不同則返回拼接變量。變量到最後一個元素的時候咱們讓字符串指針歸零,字符指針加一繼續進行下一輪遍歷,直到找出最長公共前綴爲止,代碼以下:函數


不過作爲這道題後我想其實能夠利用二分查找來解題,若是用到二分查找的話時間複雜度就會變成O(logn),比個人O(m*n)的時間複雜度更少。二分查找的解題思路是這樣的,隨機用一個元素的的中間值和下標做比對值,這裏咱們用第一個元素的中間值,而後遞歸循環比較當前下標裏每一個元素的字符是否相等,若是是則對右邊繼續遞歸,不是則對左邊繼續遞歸,當起始下標大於結束下標的時候遞歸結束返回一個字符串,方法以下:post


本題有個地方要注意的是空字符也是一個字符串,要判斷當前數組中有無空字符串,有的話則直接返回。說實話,好像中文版的運行時間好像廣泛比國際版的運行時間慢,不知道什麼緣由。.net

上一題: leetCode第十二題和十三題,整數與羅馬數的相互轉換,JavaScript實現 
相關文章
相關標籤/搜索