编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
我的思路是取数组第一项为最初的值,然后和其他的各项进行,比较,然后得出公共前缀。
var longestCommonPrefix = function (strS) {
if (strS.length == 0) {
return ''
} else {
let common = strS[0];
for (let i = 1; i < strS.length; i++) {
let j = 0;
for (;j < strS[i].length && j < common.length; j++) {
console.log(j,strS[i][j])
if (common[j] != strS[i][j]) {
break
}
}
common = common.substr(0, j)
if (common === '') return common
}
return common
}
};
然后我发现一个更有意思的解答方式,通过比较字符串的大小进行区分,
字符串大小比较的规则是:比较的时候,从字符串左边开始,一次比较每个字字符,直接出现差异、或者其中一个串结束为止。
于是就有另一种思路,我们去比较字符串中的最大值和最小值,只要求其公共的前缀,就是最大的公共前缀。
var longestCommonPrefix = function(strs) {
if(strs.length == []){
return ""
}else{
let res = ""
let max = strs[0]
let min = strs[0]
for(var i = 0;i<strs.length-1;i++){
min = min > strs[i+1] ? strs[i+1] : min
max = max < strs[i+1] ? strs[i+1] : max
//找到数组中字符串的最大和最小值
}
// 比较最大和最小的公共前缀
for(var x = 0;x<max.length;x++){
if(max[x] == min[x]){
res = res + max[x]
}else{
break
}
}
return res
}
};
相比第一种而言,第二种的的内存损耗以及运行时间更短。所以换个思路也是很重要哦。