leetcode-14- 最长公共前缀
【摘要】 leetcode-14- 最长公共前缀
leetcode-14- 最长公共前缀
① 题目
如下:
编写一个函数来查找字符串数组中的最长公共前缀
如果不存在公共前缀,返回空字符串 “”
官方给的实例:
示例 1:
输入:strs = ["flower","flow","flight"]
输出:"fl"
示例 2:
输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。
② 思路分析
- 分析:
取出最长公共前缀,那我们就可以直接拿第一个出来,然后转为数组,然后拿后面的每一个去跟这个第一项作比较,看里面的字符是否相同,如果后面的字符创长度比这个第一项还短,那就可以直接忽略不计。比这个长的话,游戏继续。
具体实现:
数组为空,返回’’
循环里面的字符串每个的长度 i
循环外层数组长度 s
判断flower 下的f是否和flow 下的f相同
相同=> 返回l拼接到第一个下面依次
不相同=> 返回原本的
③ 解题
方式一:
var longestCommonPrefix = function(strs) {
if(strs.length==0){
return ''
};
var allstring = "";
for (var s = 0; s < strs[0].length; s++) {
var dataA = strs[0][s];
for (var m = 1; m < strs.length; m++) {
if ( s >= strs[m].length || strs[m][s] !== strs[0][s]) {
return allstring;
}
allstring += strs[0][s];
}
}
return allstring
};
输出以后发现,虽然貌似没啥毛病,但是就是出现问题。
ffllo strsall
重新分析我们的逻辑可以发现
我依次使用了循环第一个数据字符串长度 ⇒ 整个数组的长度= > 当第一次能满足条件的时候,我把值塞进了allstring里面,但是这个时候返回的第一个字母l是在我循环外层数组的时候(也就是重新循环了2次),所以返回的ll ,所以我的allstring 其实应该放到外层循环的外头即可,取循环第一次的其中相同的字符串即可。
处理Bug
完善我们的代码以后:
var strs = ["flower", "flow", "flight"],flower = ['f', 'l'];
function strscommon(strs){
if(strs.length==0){
return ''
};
var allstring = "";
for (var s = 0; s < strs[0].length; s++) {
var dataA = strs[0][s];
for (var m = 1; m < strs.length; m++) {
if ( s >= strs[m].length || strs[m][s] !== strs[0][s]) {
return allstring;
}
}
allstring += strs[0][s];
}
}
console.log(strscommon(strs),'strsall');
查看我们的输出结果:
fl strsall
解题完成!
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)