一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第7天,点击查看活动详情。
一、题目描述:
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例:
示例 1:
输入:strs = ["flower","flow","flight"]
输出:"fl"
示例 2:
输入:strs = ["dog","racecar","car"]
输出:""
解释:输入不存在公共前缀。
提示:
1 <= strs.length <= 2000 <= strs[i].length <= 200strs[i]仅由小写英文字母组成
二、题解:
这道题需要字符串每一位一一匹配。
这里需要使用循环遍历数组每一个,得到每一组字符串,再根据下标匹配字符串每一位,只要存在位数不同跳出即可
注意越界情况
方法一 循环匹配法
- 原理。根据题解循环匹配叠加即可。
- 思路。
- 默认取第0个的index位
- 字符串每一个都相同的话,则res叠加
- 字符串有一位不同则跳出循环
代码:
var longestCommonPrefix = function(strs) {
let res = ''
let index = 0
let flag = true
while(flag){
// 防止越界情况
if(index>=strs[0].length){
flag = false
break
}
let temp = strs[0][index]
for(let i = 0;i< strs.length;i++ ){
// 如果每一个的第index个都想等,则在最后一个进行增加
if(strs[i][index] === temp){
i === strs.length-1 && (res += temp?temp:'')
}else {
flag = false
break
}
}
index++
}
return res
};
方法二 巧用遍历法
- 原理。根据题解利用every匹配相关条件且判断每一个都匹配即可。
- 思路。
- 声明下标end
- 使用every循环当做while的跳出判断
- 当end大于等于每一个的长度时且存在一个不匹配第0个时的end时
- 跳出循环
- 截取结果
代码:
var longestCommonPrefix = function(strs) {
let end=0
// 当end小于每一个的长度时且每一个都匹配第0个时
while(strs.every(item => (end<item.length) && (strs[0][end]===item[end]) ))
end++
return strs[0].slice(0,end)
};
三、总结
- 此题可以循环匹配法和巧用遍历法两种方案
- 循环匹配法主要是根据题解循环匹配叠加即可。
- 巧用遍历法主要是根据题解利用every匹配相关条件且判断每一个都匹配即可。
文中如有错误,欢迎在评论区指正