1. 程式人生 > 實用技巧 >最長公共字首

最長公共字首

最長公共字首

編寫一個函式來查詢字串陣列中的最長公共字首。
如果不存在公共字首,返回空字串""

示例

輸入: ["flower","flow","flight"]
輸出: "fl"
輸入: ["dog","racecar","car"]
輸出: ""
解釋: 輸入不存在公共字首。

題解

// 橫向比較
/**
 * @param {string[]} strs
 * @return {string}
 */
var longestCommonPrefix = function(strs) {
    if(strs.length === 0) return "";
    return strs.reduce( (pre, cur) => {
        var tmp = "";
        for(let i=0;i<pre.length; ++i){
            if(pre[i] === undefined || pre[i] !== cur[i]) break;
            else tmp += cur[i];
        }
        return tmp;
    })
};

// 縱向比較
/**
 * @param {string[]} strs
 * @return {string}
 */
var longestCommonPrefix = function(strs) {
    var n = strs.length;
    var target = "";
    var interrupt = false;
    var i = -1;
    while(true) {
        ++i;
        if(!strs[0]) return "";
        var tmp = strs[0][i];
        for(let k=0; k<n; ++k){
            if(strs[k][i] === undefined || tmp !== strs[k][i]) {
                interrupt = true;
                break;
            }
        }
        if(interrupt) break;
        target = `${target}${tmp}`;
    }
    return target;
};

思路

橫向比較的方法是藉助Js標準庫的reduce方法,將每次比較的結果進行返回,作為下一次比較傳入函式的第一個引數,第二個引數就是當前的字串,注意reduce方法在沒有第三個引數的情況下是以陣列中第二個值作為傳入函式的第二個引數也就是當前值,也就是說長度為n的陣列只會計算n-1次。縱向比較的方式就是依次比較字串陣列中每個字元,即不斷迴圈比較所有字串的第12...n個字元,在比較的過程中在列中出現不相同的字元即結束迴圈並返回結果。

每日一題

https://github.com/WindrunnerMax/EveryDay

參考

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