编写一个函数来查看字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串。
横向扫描
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)