持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第11天,点击查看活动详情
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入: strs = ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: strs = ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
提示:
1 <= strs.length <= 2000 <= strs[i].length <= 200strs[i]仅由小写英文字母组成
解题思路
本题要我们获取字符串数组的最长公共前缀,其实思路很简单,就是从第一个字符开始,遍历字符串数组中的每个字符串,比较当前字符是否相同,如果都相同,则累加结果字符串并继续向后对比,否则在当前位置停止,返回之前累加的结果字符串。
具体思路如下:
let tail = 0用来记录当前对比字符的下标;let cur = ''用来记录当前对比的字符的值;let flag = true本次字符对比是否全部相同;- 最外层使用
while循环包裹,在flag为真的时候一直循环内部逻辑; - 如果当前处理的是第一个字符串,说明开始了一次新的循环,根据记录的下标
tail更新cur; - 否则通过
tail获取当前字符串本地对比的字符和cur对比,如果不同,则标记flag = false,并退出循环; - 如果当前处理的是最后一个字符串,则说明本次循环对比成功,更新下标
tail向后移动一位。 - 当
while循环结束,说明已经获取到了第一个不满足条件的下标位置,根据该下标截取第一个字符串即字符串数字的最长公共前缀。
代码实现
var longestCommonPrefix = function(strs) {
let len = strs.length
let tail = 0
let cur = ''
let flag = true
while(flag){
for(let i = 0;i<len;i++){
if(i===0){
if(strs[i][tail]){
cur = strs[i][tail]
}else{
flag = false
}
}else if(strs[i][tail] !== cur){
flag = false
break
}
if(i === len-1){
tail++
}
}
}
return strs[0].substr(0,tail);
}
至此我们就完成了 leetcode-14-最长公共前缀
如有任何问题或建议,欢迎留言讨论!