20190501-編寫一個函數來查找字符串數組中的最長公共前綴。如果不存在公共前綴,返回空字符串


題目描述

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

如果不存在公共前綴,返回空字符串 ""。

示例 1:

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

輸出: "fl"

示例 2:

輸入: ["dog","racecar","car"]

輸出: ""

解釋: 輸入不存在公共前綴。

考點

  1. 根據列表中的字符串長度排序
  2. 兩層for循環的使用,for|else的使用

算法1

從下標0開始,判斷每一個字符串同一索引所對應的值,判斷是否全部相同。直到遇到不全部相同的時候return。

由於提供的單詞長度不同,應該以最小單詞為基准進行比較,如["flower","flow","flight"]中應該以flow來和剩下的單詞一一對比。

  1. 所有單詞同一索引所對應的值相等,則更新最長公共前綴
  2. 有一個單詞與其他單詞同一索引所對應的值不相等,則返回最后更新的最長公共前綴

代碼1

def longestCommonPrefix(strs):
    """
    :type strs: List[str]
    :rtype: str
    """
    strs.sort(key =len)# 根據列表中的字符串長度排序
    if not strs:
        return ''
    result = ''#記錄公共前綴
    for i in range(len(strs[0])):#以列表中長度最小的單詞為基准進行遍歷
        for j in strs:#遍歷列表中的每個字符串
            if j[i] != strs[0][i]:#如果列表中的字符串的對應下標是否相同
                return result
        else:
            result += strs[0][i]#如果所有字符串下標都相同,更新最長公共前綴
    return result
print(longestCommonPrefix([""]))

算法2

利用python的max()和min(),在Python里字符串是可以比較的,按照ascII值排,舉例abb,aba,abac,最大為abb,最小為aba。所以只需要比較最大最小的公共前綴就是整個數組的公共前綴

代碼2

    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        s1 = min(strs)
        s2 = max(strs)
        for i,x in enumerate(s1):
            if x != s2[i]:
                return s2[:i]
        return s1

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM