最長公共前綴

題目信息

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

示例 1:

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

示例 2:

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

解題思路

  1. 暴力破解:依次比較所有元素得出公共前綴
  2. 無效操作分析:當(dāng)數(shù)組較前元素沒有公共前綴后,后面的元素就沒有繼續(xù)比較的意義了搁嗓。
  3. 優(yōu)化方法:
  4. 考慮邊界:
    1. 數(shù)組為空,公共前綴為“”
    2. 數(shù)組有且只有一個(gè)元素腺逛,公共前綴為該元素本身。
  5. 編碼實(shí)現(xiàn)

代碼

解法一:橫向比較

class Solution {
    public String longestCommonPrefix(String[] strs) {
        // 邊界檢查
        if (strs == null || strs.length == 0) {
            return "";
        }
        // 初始化前綴為第一個(gè)元素
        String prefix = strs[0];
        int count = strs.length;
        for (int i = 1; i < count; i++) {
            prefix = longestCommonPrefix(prefix, strs[i]);
            // 已經(jīng)沒有前綴后就沒有繼續(xù)比較的必要了
            if (prefix.length() == 0) {
                break;
            }
        }
        return prefix;
    }

    /**
     * 返回當(dāng)前字符與前綴的共同部分
     */
    private String longestCommonPrefix(String str1, String str2) {
        // 優(yōu)化:不必比較所有字符安疗,比較完當(dāng)前已知前綴后即可得知新的公共前綴
        int length = Math.min(str1.length(), str2.length());
        int index = 0;
        while (index < length && str1.charAt(index) == str2.charAt(index)) {
            index++;
        }
        return str1.substring(0, index);
    }
}

解法二:縱向比較

class Solution {
    public String longestCommonPrefix(String[] strs) {
        if (strs == null || strs.length == 0) {
            return "";
        }
        int length = strs[0].length();
        int count = strs.length;
        for (int i = 0; i < length; i++) {
            char c = strs[0].charAt(i);
            for (int j = 1; j < count; j++) {
                if (i == strs[j].length() || strs[j].charAt(i) != c) {
                    return strs[0].substring(0, i);
                }
            }
        }
        return strs[0];
    }
}

題目來源:力扣(LeetCode)
題目鏈接:https://leetcode-cn.com/problems/longest-common-prefix

商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán)荐类,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末玉罐,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子吊输,更是在濱河造成了極大的恐慌,老刑警劉巖季蚂,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扭屁,死亡現(xiàn)場(chǎng)離奇詭異算谈,居然都是意外死亡疯搅,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門罪治,熙熙樓的掌柜王于貴愁眉苦臉地迎上來礁蔗,“玉大人,你說我怎么就攤上這事浴井。” “怎么了磺浙?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長瘤缩。 經(jīng)常有香客問我,道長剥啤,這世上最難降的妖魔是什么不脯? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮防楷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘复局。我一直安慰自己是整,他們只是感情好民假,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著羊异,像睡著了一般。 火紅的嫁衣襯著肌膚如雪易迹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天睹欲,我揣著相機(jī)與錄音一屋,去河邊找鬼。 笑死冀墨,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的诽嘉。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼骄酗,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼悦冀!你這毒婦竟也來了趋翻?” 一聲冷哼從身側(cè)響起雏门,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤掸掏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后丧凤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡浩螺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了要出。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡或颊,死狀恐怖传于,靈堂內(nèi)的尸體忽然破棺而出囱挑,到底是詐尸還是另有隱情沼溜,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布系草,位于F島的核電站,受9級(jí)特大地震影響悄但,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜助泽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一嚎京、第九天 我趴在偏房一處隱蔽的房頂上張望嗡贺。 院中可真熱鬧鞍帝,春花似錦、人聲如沸帕涌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至床绪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間癞己,已是汗流浹背膀斋。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國打工痹雅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人绩社。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓铃将,卻偏偏與公主長得像项鬼,于是被迫代替她去往敵國和親劲阎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子绘盟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

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

  • 題目 難度級(jí)別:簡單 編寫一個(gè)函數(shù)來查找字符串?dāng)?shù)組中的最長公共前綴龄毡。 如果不存在公共前綴,返回空字符串 ""沦零。 示...
    422ccfa02512閱讀 86評(píng)論 0 0
  • 編寫一個(gè)函數(shù)來查找字符串?dāng)?shù)組中的最長公共前綴 https://leetcode-cn.com/problems/l...
    Shimmer_閱讀 151評(píng)論 0 1
  • 參考:https://leetcode-cn.com/problems/two-sum/solution/zui-...
    iamlyly閱讀 703評(píng)論 0 0
  • 題目:編寫一個(gè)函數(shù)來查找字符串?dāng)?shù)組中的最長公共前綴路操。 如果不存在公共前綴,返回空字符串 ""屯仗。 示例 1: 示例 ...
    minningl閱讀 130評(píng)論 0 0
  • LeetCode第十四題 題目描述:編寫一個(gè)函數(shù)來查找字符串?dāng)?shù)組中的最長公共前綴搔谴。 如果不存在公共前綴魁袜,返回空字符...
    Lularible閱讀 74評(píng)論 0 1