本文正在参与掘金团队号上线活动,点击 查看大厂春招职位
题目描述
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。
例如数组strs = ["flower","flow","flight"],最长公共前缀是"fl"
数组["dog","racecar","car"],不存在公共前缀,结果就是""
思路分析
要取的是公共前缀,数组中每个字符串的开头都要是一样的,所以可以先取第一个字符串,跟其他字符串一一比较。
比较的时候,因为要取相同的前缀,所以从第0个字符开始比较,不相等就退出内循环,此时的j为相等字符处的下标,原字符串进行截取,得出最后的结果。记得在最开始的时候,判断字符串长度。
const longestCommonPrefix = function (list) {
if(list.length === 0){
return ""
}
//起始取第一个字符串作为对比
let str = list[0]
//遍历数组,从第二个i=1开始
for (let i = 1; i < list.length; i++) {
let j = 0
//当前字符串list[i]遍历
for (; j < list[i].length; j++) {
//两个字符串对比第j个字符,不相等就不需要了,退出循环
if (str[j] !== list[i][j]) {
break
}
}
//退出循环后,得到的j,即为当前相等的地方
str = str.substring(0, j);
}
return str
}
官方解题里,采用的是横向扫描的方式。遍历数组中的每个字符串,对于每个遍历到的字符串,更新最长公共前缀,当遍历完所有的字符串以后,即可得到字符串数组中的最长公共前缀。Java版的,后续可以试试改成js来写。
总结
坚持LeetCode刷题,自己尝试去解题,可能自己的方法不是最好最快最优的,也可能自己的方法或多或少还是存在问题,但是这是一个过程,坚持的过程。每次做完之后,再去看官方的解答,起初不一定能看得懂,等到看懂了才会恍然大悟。