LeetCode 最長公共前綴

最長公共前綴


題目來源:https://leetcode-cn.com/problems/longest-common-prefix/python

題目


編寫一個函數來查找字符串數組中的最長公共前綴。segmentfault

若是不存在公共前綴,返回空字符串 ""。數組

示例 1:微信

輸入: ["flower","flow","flight"]
輸出: "fl"

示例 2:app

輸入: ["dog","racecar","car"]
輸出: ""
解釋: 輸入不存在公共前綴。

說明:函數

全部輸入只包含小寫字母 a-z 。spa

解題思路


方法一:思路

  1. 若字符串數組爲空,或長度爲 0,直接返回空字符串;
  2. 取首個字符串,與下一個字符串比較,得出二者的公共前綴;
  3. 若二者比較結果無公共前綴,直接返回空字符串。不然執行下一步;
  4. 以得出的公共前綴,再與下一個字符串比較;
  5. 重複步驟 34,得出字符串數組最長公共前綴。

方法二:思路

  1. 利用 zip() 的特性,實現字符串數組每一個字符串逐列比較;
  2. 利用 set() 對該列去重,若最終剩下的字符長度爲 1,則表示都相同。不然,跳出循環。
  3. 取最終逐列比較,set() 去重長度爲 1 的列,組合即爲最長公共前綴。若無符合要求的列,直接返回空字符串。

代碼實現


方法一:代碼實現

class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        '''找出字符串數組最長公共前綴

        Args:
            strs: 傳入待匹配的字符串數組
        
        Returns:
            返回字符串數組中存在的最長公共前綴
            不存在則返回空字符串 ""
        '''
        # 若列表爲空,直接返回空字符
        if not strs:
            return ""
        # 取首位字符串,以待與後面進行比較
        prefix = strs[0]
        # 遍歷字符串數組,逐個比較
        for i in range(1, len(strs)):
            # 比較兩字符串,找到公共前綴前,逐個比較
            while strs[i].find(prefix) != 0:
                # 未找到公共前綴前,從末尾逐個刪減
                prefix = prefix[0:len(prefix)-1]
                # 若無公共前綴,直接返回
                if len(prefix) == 0:
                    return ""
        return prefix

方法二:代碼實現

class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        '''找出字符串數組最長公共前綴

        Args:
            strs: 傳入待匹配的字符串數組
        
        Returns:
            返回字符串數組中存在的最長公共前綴
            不存在則返回空字符串 ""
        '''
        # 利用 zip() 函數的特性,逐列比較字符串數組中的每一個字符串
        prefix_len = []  # 用以保存共同字符的長度
        for num,s in enumerate(zip(*strs)):
            # 利用 set() 去重複
            # 若只保留 1 個字符,則表示該列相同
            # 不然該列不一樣,直接跳出
            if len(set(s)) == 1:
                prefix_len.append(num)
            else:
                break
        # 若是 prefix_len 爲空直接返回空字符串
        # 不然截取任意字符串的 prefix_len 列表長度的字符,即爲最長公共前綴
        return strs[0][:len(prefix_len)] if prefix_len else ""

實現效果


方法一:實現效果

longestCommonPrefixResult1.png

方法二:實現效果

longestCommonPrefixResult2.png


以上就是本篇的主要內容3d


歡迎關注微信公衆號《書所集錄》
相關文章
相關標籤/搜索