Skip to main content

0014 - Longest Common Prefix

大意說明

找出一組字串陣列中,相同字串的部份。

例如 ["flower","flow","flight"] 的結果是 fl ,["dog","racecar","car"] 的結果是空字串(沒有相同的部份)

解題思路

想不到,所以參考了答案

首先先做字串 list 的排序,原因是字串經過排序之後,一定是由各字串的字母一路排上去,所以最不一樣的肯定在最後面,這樣就可以把比較範圍縮小(也比較不會不知所措)

接著就是第一個字串跟最後一個字串比較,然後用長度最小的字串長度當作迴圈結束條件之一

如果比到一半發現字元不同,直接跳掉。否則就繼續加入字串,直到結束條件達成為止。

程式碼如下:

class Solution(object):
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """

        result = ""
        
        # 依照字串字母順序排序,最不一樣的一定在最後面
        sorted_list = sorted(strs)
        
        first = sorted_list[0]
        last = sorted_list[-1]

        for i in range(0, min(len(first), len(last))):
            if first[i] != last[i]:
                return result
            result += first[i]
        
        return result

這邊反而鼓勵使用程式語言內建排序方式,Python 的話就是 sorted() ,Java 的話是 Array.sort() 。