题目
难度级别:简单
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""
。
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z 。
解题思路
longestCommonPrefix
函数处理传入进来的数组,若数组长度为0,则直接输出""
。若传入的数组长度不为0,则将数组的第一位数做为初始返回值,并赋值给变量str
,然后对数组从下标1开始进行循环,调用theSameInitials
函数对str
与当前的字符串进行比较,若循环内部的str
为空字符串时,则退出循环。否则,将返回值str与当前的值进行比较前面相同的字母字符串重新赋值给str
。
const longestCommonPrefix = function(strs) {
if (strs.length === 0) {
return ""
}
let str = strs[0]
for (let i = 1; i < strs.length; i++) {
if (str === "") break
str = theSameInitials(str,strs[i])
}
return str
};
const theSameInitials = function(s,l) {
let str = ""
if (s.length > 0 && l.length > 0) {
for (let i = 0; i < s.length; i++) {
if (s[i] !== l[i]) break
str += s[i]
}
}
return str
}
优化代码
将比较写在strs
数组的循环内部,通过比较str
与当前数组strs
的相同项,str
利用字符串substring
的方法取前面相同项(不过感觉执行速度上要慢一些,不知道是不是调用了substring
这个方法)。
const longestCommonPrefix = function(strs) {
if (strs.length === 0) {
return ""
}
let str = strs[0]
for (let i = 1; i < strs.length; i++) {
if (str === "") break
if (str.length > 0 && strs[i].length > 0) {
let j = 0
for (; j < str.length; j++) {
if (str[j] !== strs[i][j]) break
}
str = str.substring(0,j)
}else{
str = ""
break
}
}
return str
};
题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-common-prefix
网友评论