一天一大 leet(最长公共前缀)难度:简单 DAY-15
时间:2022-07-25
本文章向大家介绍一天一大 leet(最长公共前缀)难度:简单 DAY-15,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例
输入: ["flower","flow","flight"]
输出: "fl"
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明
所有输入只包含小写字母 a-z 。
抛砖引玉
- 如果输入空数组则返回空
- 任取一个字符串长度假设为最大相同长度
- 循环字符串数组找到与这个长度前 n 位相同,求 n,
- 求 n,截取前 n 位比较
- 不相同则 n--,知道找到相同
/**
* @param {string[]} strs
* @return {string}
*/
var longestCommonPrefix = function (strs) {
if (!strs.length) return ''
let _resultNum = strs[0].length - 1
for (let i = 1; i < strs.length; i++) {
while (
strs[i - 1].substring(0, _resultNum + 1) !==
strs[i].substring(0, _resultNum + 1)
) {
_resultNum--
}
}
return strs[0].substring(0, _resultNum + 1) || ''
}
官方答案
横向扫描
- 使用递归每次比较出来的公共前缀与之后的字符串比较
- 递归中,每个字符串的位置均需要比较
/**
* @param {string[]} strs
* @return {string}
*/
var longestCommonPrefix = function (strs) {
if (strs == null || strs.length == 0) {
return ''
}
var prefix = strs[0]
var count = strs.length
for (var i = 1; i < count; i++) {
prefix = CommonPrefix(String(prefix), String(strs[i]))
if (prefix.length == 0) {
break
}
}
return prefix
function CommonPrefix(str1, str2) {
var length = Math.min(str1.length, str2.length)
var index = 0
while (index < length && str1.charAt(index) == str2.charAt(index)) {
index++
}
return str1.substring(0, index)
}
}
纵向扫描
从前往后遍历所有字符串的每一列,比较相同列上的字符是否相同,
- 如果相同则继续对下一列进行比较,
- 如果不相同则当前列不再属于公共前缀,当前列之前的部分为最长公共前缀
/**
* @param {string[]} strs
* @return {string}
*/
var longestCommonPrefix = function (strs) {
if (strs == null || strs.length == 0) {
return ''
}
var length = String(strs[0]).length
var count = strs.length
for (var i = 0; i < length; i++) {
var c = strs[0].charAt(i)
for (var j = 1; j < count; j++) {
if (i == strs[j].length || strs[j].charAt(i) != c) {
return strs[0].substring(0, i)
}
}
}
return strs[0]
}
其他解法
re 初始化为数组中第一个元素,逐个比较,当比较通过时返回 re,否则削去末位直至比较通过
/**
* @param {string[]} strs
* @return {string}
*/
var longestCommonPrefix = function (strs) {
var re = strs[0] ? strs[0] : ''
for (var i = 1; i < strs.length; i++) {
var regex = new RegExp('^' + re)
while (!regex.test(strs[i]) && re.length) {
re = re.slice(0, re.length - 1)
regex = new RegExp('^' + re)
}
}
return re
}
- dedecms自定义表单提交成功后提示信息修改和跳转链接修改
- dede:arclist orderby=weight dedecms列表页文章按权重排序无效问题
- Golang语言社区--Go语言基础第二节变量
- 如何让帝国CMS7.2搜索模板支持动态标签调用
- 数据视觉盛宴—数据可视化实践之美
- 使用Tensorflow对象检测在安卓手机上“寻找”皮卡丘
- 群用户通过微信小程序可以更好地协作了
- RNN入门与实践
- 群分享:关于Markdown,你可能想知道的
- Logistic回归基础篇之梯度上升算法
- IIS下实现帝国CMS搜索页伪静态
- ASP.NET MVC学习笔记06编辑方法和编辑视图
- 第一篇示例博客
- C#历代版本新特性——面试题常用
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法