【刷穿 LeetCode】14. 最長公共字首(簡單)
阿新 • • 發佈:2021-02-14
技術標籤:刷穿 LeetCode字串演算法資料結構leetcodejava
題目描述
編寫一個函式來查詢字串陣列中的最長公共字首。
如果不存在公共字首,返回空字串 “”。
示例 1:
輸入:strs = ["flower","flow","flight"]
輸出:"fl"
示例 2:
輸入:strs = ["dog","racecar","car"]
輸出:""
解釋:輸入不存在公共字首。
提示:
0 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i]
僅由小寫英文字母組成
樸素解法
對每個字串進行逐位檢查,直到不滿足公共字首:
class Solution {
public String longestCommonPrefix(String[] ss) {
String ans = "";
if (ss.length == 0) return ans;
for (int i = 0; i < Integer.MAX_VALUE; i++) {
String s = ss[ 0];
if (i >= s.length()) return ans;
char c = ss[0].charAt(i);
for (String item : ss) {
if (i >= item.length() || item.charAt(i) != c) return ans;
}
ans += String.valueOf(c);
}
return ans;
}
}
說明:判斷條件不一定要寫成 i < Integer.MAX_VALUE
i <= 200
也可以。不影響執行效率。
-
時間複雜度:對於
n
個字串,都需要遍歷到公共字首長度m
。複雜度為 O ( n m ) O(nm) O(nm) -
空間複雜度:需要儲存公共字首作為答案返回。複雜度為 O ( m ) O(m) O(m)
最後
這是我們「刷穿 LeetCode」系列文章的第 No.14
篇,系列開始於 2021/01/01,截止於起始日 LeetCode 上共有 1916 道題目,部分是有鎖題,我們將先將所有不帶鎖的題目刷完。
在這個系列文章裡面,除了講解解題思路以外,還會盡可能給出最為簡潔的程式碼。如果涉及通解還會相應的程式碼模板。
由於 LeetCode 的題目隨著周賽 & 雙週賽不斷增加,為了方便我們統計進度,我們將按照系列起始時的總題數作為分母,完成的題目作為分子,進行進度計算。當前進度為 14/1916
。
為了方便各位同學能夠電腦上進行除錯和提交程式碼,我建立了相關的倉庫:Github 地址 & Gitee 地址。
在倉庫地址裡,你可以看到系列文章的題解連結、系列文章的相應程式碼、LeetCode 原題連結和一些其他的優選題解。
#演算法與資料結構
#LeetCode題解
#演算法面試