求最长公共前缀

267 阅读1分钟

编写一个函数来查看字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串。

横向扫描

const strs = ['flower', 'flow', 'flight']

function longestCommonPrefix(strs) {
    if(!strs || strs.length === 0) return '';
    let prefix = strs[0];
    for(let i = 1; i < strs.length; i++) {
        prefix = compare(prefix, strs[i]) // 更新最小公共前缀
    }
    return prefix;
}
// 比较两个字符串的最长公共前缀。
function compare(s1, s2) {
    for (let i = 0; i < s1.length; i++) {
        if(s1[i] !== s2[i]) {
            return s1.slice(0, i)
        }
    }
    return ''
}


longestCommonPrefix(strs) //fl

时间复杂度: O(mn) , m是字符串数组的长度, n 是字符串的长度。

空间复杂度: O(1)

纵向扫描

const strs = ['flower', 'flow', 'flight']
function longestCommonPrefix(strs) {
    if(!strs || strs.length === 0) return '';
    let prefix = strs[0]
    for(let i = 0; i < prefix.length; i++) {
        for (let j = 1; j < strs.length; j++) {
            if(strs[j][i] !== prefix[i]) {
                return prefix.slice(0, i)
            }
        }
    }
}
longestCommonPrefix(strs) //fl

时间复杂度: O(mn) , m是字符串数组的长度, n 是字符串的长度。

空间复杂度: O(1)