1. 程式人生 > 其它 >【刷穿 LeetCode】14. 最長公共字首(簡單)

【刷穿 LeetCode】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

,題目給出了範圍是 200 以內,寫成 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題解

#演算法面試

宮水三葉的刷題日記