LeetCode題庫第十四題(簡單系列)

題目及要求:

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

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

示例 1:

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

示例 2:

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

說明:

所有輸入只包含小寫字母 a-z 。

思路:

看到題目的時候,第一想法是要用需要用到列表的切片,而且肯定是要遍歷切片的,但是怎麼求得strs裏面元素每個元素的最小值呢???這是一個問題,然後我用了len(strs[i][m])的形式,來求最小值,後來自己運行之後再看出來,這個長度就是1,蠢哭。

在我嘗試了n邊,而且最後在LeetCode上面都運行錯誤的時候,我放棄了自己思考,轉向了網絡,怎麼去尋求前人的知識,在看了一些文章以後,我決定以這個文章作爲參考 Python實現-14.最長公共前綴看到裏面的方法之後,我有了大致的方向,於是我動手開始編碼。。。。

class Solution:
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        m=0
        list1=[]
        list2=[]
        if len(strs)==0:
            return ""
        else:
            min_num = min([len(x) for x in strs])#求得最小的字符串長度
        if strs[0]=="":
            return ""
        while m<min_num:
            for i in range(len(strs)):
                if strs[i][m]==strs[i-1][m]:
                    list1.append(strs[i][m])
            m=m+1


        for i in list1:
            if list1.count(i)==len(strs):
                if i not in list2:
                    list2.append(i)


            elif len(strs)==len(strs)*min_num:
                if list1.count(i)==len(strs):
                    if i not in list2:
                        list2.append(i)
            else:
                if list1.count(i)==len(strs)*min_num:
                    list2=strs[0]
        return "".join(list2)

以上代碼長也就算了,居然還是報錯了,恩,在LeetCode上面錯誤的位置進行修改還是通過不了,o(╥﹏╥)o,我已放棄思考。

重新再看了一遍文章,我決定按照第二個方法去編碼。我要站在巨人的肩上看世界。

class Solution:
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
        m=0
        if len(strs)==0:#當爲空列表時
            return ""
        else:
            min_num = min([len(x) for x in strs])#求出最小的長度
        if len(strs)==1:#當字符串爲""和只有只有1個字符串時
            return strs[0]


        while m<min_num:
            for i in range(len(strs)):
                if strs[i][m]!=strs[i-1][m]:#此處如果用i+1後續會報出out of range的情況
                    return strs[0][:m]#此處表明以strs裏面的第一個字符串爲參照,當存在m時,返回
                #m前面的字符
            m+=1
        return strs[0][:m]

這個通過了,雖然不是自己想到的方法,但是還是可恥的放個圖吧。敲打敲打敲打


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章