LeetCode之最長(zhǎng)公共前綴
前言
我們社區(qū)陸續(xù)會(huì)將顧毅(Netflix 增長(zhǎng)黑客,《iOS 面試之道》作者,ACE 職業(yè)健身教練。微博:@故胤道長(zhǎng)[1])的 Swift 算法題題解整理為文字版以方便大家學(xué)習(xí)與閱讀。
LeetCode 算法到目前我們已經(jīng)更新了 13 期,我們會(huì)保持更新時(shí)間和進(jìn)度(周一、周三、周五早上 9:00 發(fā)布),每期的內(nèi)容不多,我們希望大家可以在上班路上閱讀,長(zhǎng)久積累會(huì)有很大提升。
不積跬步,無(wú)以至千里;不積小流,無(wú)以成江海,Swift社區(qū) 伴你前行。
難度水平:簡(jiǎn)單
1. 描述
編寫(xiě)一個(gè)函數(shù)來(lái)查找字符串?dāng)?shù)組中的最長(zhǎng)公共前綴。
如果不存在公共前綴,返回空字符串 ""。
2. 示例
示例 1
- 輸入:strs = ["flower","flow","flight"]
- 輸出:"fl"
示例 2
- 輸入:strs = ["dog","racecar","car"]
- 輸出:""
- 解釋?zhuān)狠斎氩淮嬖诠睬熬Y。
約束條件:
- 1 <= strs.length <= 200
- 0 <= strs[i].length <= 200
- strs[i] 僅由小寫(xiě)英文字母組成
3. 答案
- class LongestCommonPrefix {
- func longestCommonPrefix(_ strs: [String]) -> String {
- guard let firstStr = strs.first else {
- return ""
- }
- var res = ""
- for (i, char) in firstStr.enumerated() {
- // dropFirst(_ k: Int = 1) returns a Substring struct
- for str in strs.dropFirst() {
- if i == str.count {
- return res
- }
- // Another easy way: Array(str)[i], time complexity is linear though
- let currentStrChar = str[str.index(str.startIndex, offsetBy: i)]
- if char != currentStrChar {
- return res
- }
- }
- res.append(char)
- }
- return res
- }
- }
- 主要思想:首先使用第一個(gè)字符串作為結(jié)果,在迭代數(shù)組時(shí)修改
- 時(shí)間復(fù)雜度: O(nm)
- 空間復(fù)雜度: O(m)
m 為最長(zhǎng)前綴長(zhǎng)度
該算法題解的倉(cāng)庫(kù):LeetCode-Swift[2]
點(diǎn)擊前往 LeetCode[3] 練習(xí)
參考資料
[1]@故胤道長(zhǎng):
https://m.weibo.cn/u/1827884772
[2]LeetCode-Swift:
https://github.com/soapyigu/LeetCode-Swift
[3]LeetCode:
https://leetcode.com/problems/longest-common-prefix/