1. 程式人生 > >LeetCode演算法題14:最長公共字首解析

LeetCode演算法題14:最長公共字首解析

編寫一個函式來查詢字串陣列中的最長公共字首。
如果不存在公共字首,返回空字串 “”。
示例1:

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

示例2:

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

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

這個題很有意思,我只想到了暴力法,而且我覺得在沒有一些工具的情況下只能用暴力法。但是我一開始寫的程式全是問題,最後通過的時候已經有接近40行程式碼了,這樣的程式碼自己都覺得噁心,於是網上搜索了一下,思路都是一樣的,但是人家的程式碼確實要比我的好很多。。。。。
這個程式的思路的話,就是遍歷每一個字串的每一個元素,遍歷的方法有些不同,每次需要對所有的字串的某一個位置的元素進行對比。所以乾脆就拿出第一個字串的元素對比就可以。另外還要注意的是需要判斷字串為空的情況。
C++原始碼:

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        if(strs.empty()) return "";
        for(int i=0;i<strs[0].size();++i){
            for(int j=1;j<strs.size();++j){
                if(strs[j][i]!=strs[0][i]) return strs[0].substr(0,i);
            }
} return strs[0]; } };

對於python而言,有一個非常好用的工具叫做zip,zip() 函式用於將可迭代的物件作為引數,將物件中對應的元素打包成一個個元組,然後返回由這些元組組成的列表。
如果各個迭代器的元素個數不一致,則返回列表長度與最短的物件相同,利用 * 號操作符,可以將元組解壓為列表。
因此,zip可以自動把所有字串的每個元素放到一起,而且可以選出最短的進行對齊。
python3原始碼:

class Solution:
    def longestCommonPrefix(self, strs):
        """
        :type strs: List[str]
        :rtype: str
        """
result = '' for item in zip(*strs): if len(set(item)) > 1: return result else: result += item[0] return result