题目描述:
编写一个函数来查找字符串数组中最长的公共前缀字符串。
如果没有公共前缀,则返回空字符串“”。
Example 1:
Input: ["flower","flow","flight"]
Output: "fl"
Example 2:
Input: ["dog","racecar","car"]
Output: ""
Explanation: There is no common prefix among the input strings.
代码:
/**
* @param {string[]} strs array
* @return {string}
*/
var longestCommonPrefix = function(strs) {
var result = [];
var jiequshuzi;
//将每一个元素从首字母开始遍历后的结果拼接
strs.reduce(function (pre, cur) {
// console.log(cur);
for (var i in cur){
if (pre[i] == cur[i]){
result.push(pre[i])
}else {
break
}
}
// console.log(result);
return result
});
//最后一个首字母的下标之后的值,就是结果
result = result.join('');
console.log(result);
//获取最后一个首字母的下标
jiequshuzi = result.lastIndexOf(result[0]);
//查看结果
console.log(result.substring(jiequshuzi));
return result.substring(jiequshuzi)
};
var ary = ["flower","flow","flight","fluw"];
var ary1 = ["teacher","tea","tektic","tecnology"];
var ary2 = ["dog","racecer","car"];
longestCommonPrefix(ary) //fl
longestCommonPrefix(ary1) //te
longestCommonPrefix(ary2) //
但是:
leetcode的检测结果没过,报错信息:reduce函数需要一个初始值。

看了solution之后修改:
var longestCommonPrefix = function (strs) {
if (strs.length == 0) return "";
var prefix = strs[0];
for (var i = 1; i<strs.length; i++) {
while (strs[i].indexOf(prefix) != 0) {
prefix = prefix.substring(0, prefix.length - 1);
if (prefix.length == 0) return "";
}
}
return prefix
};

思路:
思路还是很简单,因为共同部分一定是每一个子元素都有的,所以,如果存在prefix,则第一个子元素必定包含,即是第一个子元素的子集,因此,令prefix等于第一个子元素,则对这个prefix与之后的每一个元素,对比删减即可。如果每个子元素不同,则不存在prefix,则直接返回0.
笔记:
1.splice方法用于数组,substring,substr方法用于字符串,后2者的区别在于第二个参数,一个表示截取长度,一个表示截取结束位置。
2.reduce这个方法的初始值那个参数应该是可选的,是可以的不写的(reduce相关,进去第3条) |