LeetCode演算法題14:最長公共字首解析
阿新 • • 發佈:2018-11-02
編寫一個函式來查詢字串陣列中的最長公共字首。
如果不存在公共字首,返回空字串 “”。
示例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