每日一練(35):最長公共前綴


title: 每日一練(35):最長公共前綴

categories:[劍指offer]

tags:[每日一練]

date: 2022/03/14


每日一練(35):最長公共前綴

編寫一個函數(shù)來查找字符串?dāng)?shù)組中的最長公共前綴。

如果不存在公共前綴,返回空字符串 ""。

示例 1:

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

輸出:"fl"

示例 2:

輸入:strs = ["dog","racecar","car"]

輸出:""

解釋:輸入不存在公共前綴。

提示:

1 <= strs.length <= 200

0 <= strs[i].length <= 200

strs[i] 僅由小寫英文字母組成

來源:力扣(LeetCode)

鏈接:https://leetcode-cn.com/problems/longest-common-prefix

方法一:逐字符比較

思路分析

先第一個和第二個比,保存公共前綴,再和第三個比,以此類推

string longestCommonPrefix(vector<string>& strs) {
    if (strs.size() == 0) {
        return "";
    }
    string ans = strs[0];//先從strs[0]開始,與后面一個比較
    for (int i = 0; i < strs.size(); i++) {
        string s = ans;//保存上次的公共前綴
        ans = "";
        for (int j = 0; j < strs[i].size(); j++) {
            if (s[j] == strs[i][j]) {
                ans += s[j];
            } else { //遇到不一樣的就退出循環(huán)
                break;
            }
        }
        if (ans == "") {
            break;
        }
    }
    return ans;
}

方法二:雙指針

算法流程:

先找出數(shù)組中字典序最小和最大的字符串,最長公共前綴即為這兩個字符串的公共前綴

string longestCommonPrefix(vector<string>& strs) {
    if (strs.size() == 0) {
        return "";
    }
    const auto p = minmax_element(strs.begin(), strs.end());
    for (int i = 0; i < p.first->size(); i++) {
        if (p.first->at(i) != p.second->at(i)) {
            return p.first->substr(0, i);
        }
    }
    return *p.first;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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