14. 最長(zhǎng)公共前綴(Swift版)

一、題目

編寫一個(gè)函數(shù)來查找字符串?dāng)?shù)組中的最長(zhǎng)公共前綴。
如果不存在公共前綴,返回空字符串 ""。
示例 1:

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

示例 2:

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

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

二、解題

這題比較簡(jiǎn)單,直接暴力遍歷即可,但也有兩種方式,
方法一:
是直接依次匹配第n個(gè)是否相同,相同拼接到公共前綴上,一旦發(fā)現(xiàn)不匹配的情況直接返回。
假設(shè)第一個(gè)字符串長(zhǎng)度為m,數(shù)組的數(shù)量為n,時(shí)間復(fù)雜度為O(m * n),空間復(fù)雜度為O(1).
方法二:
是先默認(rèn)數(shù)組中第一個(gè)字符串為公共前綴,然后遍歷判斷其他字符串是否有這個(gè)公共前綴,如果沒有,則清除最后一位繼續(xù)匹配,直到所有的字符串都有這個(gè)前綴或者前綴為空時(shí)返回。
假設(shè)第一個(gè)字符串長(zhǎng)度為m,數(shù)組的數(shù)量為n,時(shí)間復(fù)雜度為O(m * n),空間復(fù)雜度為O(1).

三、代碼實(shí)現(xiàn)

    class Solution {
        func longestCommonPrefix(_ strs: [String]) -> String {
            if strs.count == 0{
                return ""
            }else if strs.count == 1 {
                return strs.first!
            }else{
                var result = ""
                for (index, a) in strs.first!.enumerated() {
                    for str in strs[1..<strs.count] {
                        if index < str.count {
                            if a != str[str.index(str.startIndex, offsetBy: index)] {
                                return result
                            }
                        }else{
                            return result
                        }
                    }
                    result.append(a)
                }
                return result
            }
        }
        func longestCommonPrefix1(_ strs: [String]) -> String {
            if strs.count == 0{
                return ""
            }else if strs.count == 1 {
                return strs.first!
            }else{
                var result = strs[0]
                for i in 1..<strs.count {
                    let str = strs[i]
                    while !str.hasPrefix(result) {
                        result = String(result.prefix(result.count - 1))
                        if result.isEmpty {
                            return ""
                        }
                    }
                }
                return result
            }
        }
    }

Demo地址:github

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 算法思想貪心思想雙指針排序快速選擇堆排序桶排序荷蘭國旗問題二分查找搜索BFSDFSBacktracking分治動(dòng)態(tài)...
    第六象限閱讀 4,902評(píng)論 0 0
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,711評(píng)論 0 5
  • 字符串匹配KMP算法詳解 1. 引言 以前看過很多次KMP算法,一直覺得很有用,但都沒有搞明白,一方面是網(wǎng)上很少有...
    張晨輝Allen閱讀 2,628評(píng)論 0 3
  • 大二一節(jié)民法課,老師問我一個(gè)問題,讓我無語凝噎到現(xiàn)在,甚至成為一個(gè)個(gè)噩夢(mèng)里回蕩著的背景音。他問:“張冬,你見過女人...
    冬工廠閱讀 2,206評(píng)論 5 17
  • 關(guān)于類目(分類)能不能或者說應(yīng)不應(yīng)該添加屬性,本文不做討論。只是介紹利如何用運(yùn)行時(shí)為類添加屬性。 以上三個(gè)為<ob...
    Linco_Yang閱讀 1,842評(píng)論 0 0

友情鏈接更多精彩內(nèi)容