最長公共前綴

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

示例

示例 1:
  • 輸入:strs = ["flower","flow","flight"]
  • 輸出:"fl"
示例 2:
  • 輸入:strs = ["dog","racecar","car"]
  • 輸出:""

解答

方法一:橫向掃描

依次遍歷字符串?dāng)?shù)組中的每個(gè)字符串,對(duì)于每個(gè)遍歷到的字符串型酥,更新最長公共前綴查乒,當(dāng)遍歷完所有的字符串以后玛迄,即可得到字符串?dāng)?shù)組中的最長公共前綴。如果中間發(fā)現(xiàn)比較出來的字符串長度為0蓖议,就可以退出循環(huán)。
用LCP(S1…Sn) 表示字符串 S1…S n的最長公共前綴纺阔。
可以得到以下結(jié)論:
LCP(S1…Sn)=LCP(LCP(LCP(S1,S2),S3),…Sn)

著作權(quán)歸作者所有修然。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)愕宋,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。


/**
 * @param {string[]} strs
 * @return {string}
 */
var longestCommonPrefix = function(strs) {
    if(strs.length == 0){
        return ""
    }else if(strs.length == 1){
        return strs[0]
    }else{
        let result = strs[0];
        for(let i = 1;i<strs.length;i++){
            result = compare(result,strs[i]);//逐次比較
            if(result.length == 0){
                result = ""
                break;
            }
        }
        return result;
    }
};
/**
 * @param {string} str1
 * @param {string} str2
 * @return {string}
 */
function compare(str1,str2){
    let length = str1.length>str2.length?str2.length:str1.length;//選取最短的進(jìn)行計(jì)算
    let result = '';
    for(let i =0;i<length;i++){
        if(str2.substring(0,i+1) != str1.substring(0,i+1)){//有不相等即退出
            break;
        }else{
            result = str2.substring(0,i+1);
        }
    }
    return result;
}
復(fù)雜度分析
  • 時(shí)間復(fù)雜度:O(mn),其中 m 是字符串?dāng)?shù)組中的字符串的平均長度蝎土,n 是字符串的數(shù)量。最壞情況下誊涯,字符串?dāng)?shù)組中的每個(gè)字符串的每個(gè)字符都會(huì)被比較一次醋拧。
  • 空間復(fù)雜度:O(1)。使用的額外空間復(fù)雜度為常數(shù)丹壕。
方法二:縱向掃描

縱向掃描時(shí)庆械,從前往后遍歷所有字符串的每一列,比較相同列上的字符是否相同菌赖,如果相同則繼續(xù)對(duì)下一列進(jìn)行比較缭乘,如果不相同則當(dāng)前列不再屬于公共前綴,當(dāng)前列之前的部分為最長公共前綴琉用。沒經(jīng)過訓(xùn)練的第一想法就是這個(gè)

/**
 * @param {string[]} strs
 * @return {string}
 */
var longestCommonPrefix = function(strs) {
    if(strs.length == 0){
        return ""
    }else if(strs.length == 1){
        return strs[0]
    }else{
        let result = "";
        let flag = true;//是否存在不匹配的場(chǎng)景
        for(let i = 0;i<strs[0].length;i++){//拿第一個(gè)為基數(shù)進(jìn)行比較
            let temp = strs[0].substring(0,i+1);
            for(let j = 1;j<strs.length;j++){//每次都遍歷整個(gè)數(shù)組
                if(temp!=strs[j].substring(0,i+1)){//出現(xiàn)不匹配即退出
                    flag = false;
                    break;
                }
            }
            if(!flag){
                result = strs[0].substring(0,i);
                break;
            }else{
                result = temp;
            }
        }
        return result;
    }
};
復(fù)雜度分析
  • 時(shí)間復(fù)雜度:O(mn)堕绩,其中 m 是字符串?dāng)?shù)組中的字符串的平均長度,n 是字符串的數(shù)量邑时。最壞情況下奴紧,字符串?dāng)?shù)組中的每個(gè)字符串的每個(gè)字符都會(huì)被比較一次。
  • 空間復(fù)雜度:O(1)晶丘。使用的額外空間復(fù)雜度為常數(shù)。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末浅浮,一起剝皮案震驚了整個(gè)濱河市沫浆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌滚秩,老刑警劉巖专执,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異郁油,居然都是意外死亡本股,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門已艰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來痊末,“玉大人,你說我怎么就攤上這事哩掺。” “怎么了涩笤?”我有些...
    開封第一講書人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵嚼吞,是天一觀的道長盒件。 經(jīng)常有香客問我,道長舱禽,這世上最難降的妖魔是什么炒刁? 我笑而不...
    開封第一講書人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮誊稚,結(jié)果婚禮上翔始,老公的妹妹穿的比我還像新娘。我一直安慰自己里伯,他們只是感情好城瞎,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著疾瓮,像睡著了一般脖镀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上狼电,一...
    開封第一講書人閱讀 50,084評(píng)論 1 291
  • 那天蜒灰,我揣著相機(jī)與錄音,去河邊找鬼肩碟。 笑死强窖,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的削祈。 我是一名探鬼主播毕骡,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼岩瘦!你這毒婦竟也來了未巫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤启昧,失蹤者是張志新(化名)和其女友劉穎叙凡,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體密末,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡握爷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了严里。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片新啼。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖刹碾,靈堂內(nèi)的尸體忽然破棺而出燥撞,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布物舒,位于F島的核電站色洞,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏冠胯。R本人自食惡果不足惜火诸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望荠察。 院中可真熱鬧置蜀,春花似錦、人聲如沸悉盆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽舀瓢。三九已至廷雅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間京髓,已是汗流浹背航缀。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留堰怨,地道東北人芥玉。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像备图,于是被迫代替她去往敵國和親灿巧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • 最長公共前綴 編寫一個(gè)函數(shù)來查找字符串?dāng)?shù)組中的最長公共前綴揽涮。 如果不存在公共前綴抠藕,返回空字符串 ""。 示例 1:...
    wyof閱讀 193評(píng)論 0 0
  • 編寫一個(gè)函數(shù)來查找字符串?dāng)?shù)組中的最長公共前綴 https://leetcode-cn.com/problems/l...
    Shimmer_閱讀 153評(píng)論 0 1
  • 一蒋困、問題 編寫一個(gè)函數(shù)來查找字符串?dāng)?shù)組中的最長公共前綴盾似。如果不存在公共前綴,返回空字符串雪标。 示例 1:輸入:["f...
    Djbfifjd閱讀 345評(píng)論 0 2
  • 題目描述 編寫一個(gè)函數(shù)來查找字符串?dāng)?shù)組中的最長公共前綴零院。如果不存在公共前綴,返回空字符串 ""村刨。 示例 1:輸入:...
    hbhey閱讀 161評(píng)論 0 0
  • 14. 最長公共前綴 編寫一個(gè)函數(shù)來查找字符串?dāng)?shù)組中的最長公共前綴告抄。如果不存在公共前綴,返回空字符串 ""嵌牺。 說明...
    一角錢技術(shù)閱讀 155評(píng)論 0 0