最长公共前缀
时间:2022-07-24
本文章向大家介绍最长公共前缀,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串""
。
示例
输入: ["flower","flow","flight"]
输出: "fl"
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
题解
// 横向比较
/**
* @param {string[]} strs
* @return {string}
*/
var longestCommonPrefix = function(strs) {
if(strs.length === 0) return "";
return strs.reduce( (pre, cur) => {
var tmp = "";
for(let i=0;i<pre.length; ++i){
if(pre[i] === undefined || pre[i] !== cur[i]) break;
else tmp += cur[i];
}
return tmp;
})
};
// 纵向比较
/**
* @param {string[]} strs
* @return {string}
*/
var longestCommonPrefix = function(strs) {
var n = strs.length;
var target = "";
var interrupt = false;
var i = -1;
while(true) {
++i;
if(!strs[0]) return "";
var tmp = strs[0][i];
for(let k=0; k<n; ++k){
if(strs[k][i] === undefined || tmp !== strs[k][i]) {
interrupt = true;
break;
}
}
if(interrupt) break;
target = `${target}${tmp}`;
}
return target;
};
思路
横向比较的方法是借助Js
标准库的reduce
方法,将每次比较的结果进行返回,作为下一次比较传入函数的第一个参数,第二个参数就是当前的字符串,注意reduce
方法在没有第三个参数的情况下是以数组中第二个值作为传入函数的第二个参数也就是当前值,也就是说长度为n
的数组只会计算n-1
次。纵向比较的方式就是依次比较字符串数组中每个字符,即不断循环比较所有字符串的第1
、2
、...
、n
个字符,在比较的过程中在列中出现不相同的字符即结束循环并返回结果。
每日一题
https://github.com/WindrunnerMax/EveryDay
参考
https://leetcode-cn.com/problems/longest-common-prefix/
- CentOS7下安装mysql5.6修改字符集为utf8并开放端口允许远程访问
- CentOS7下mysql5.6修改默认编码
- 在idea中maven项目jdk编译version总是跳到1.5
- 命令行打印文件树列表: tree
- JavaScript 获取鼠标及元素在页面上的位置
- Spring cache简单使用guava cache
- SpringMVC参数校验(针对`@RequestBody`返回`400`)
- Java8学习(3)- Lambda 表达式
- Java8 in action(1) 通过行为参数化传递代码--lambda代替策略模式
- java中byte, iso-8859-1, UTF-8,乱码的根源
- 如何启动一个本地静态服务器
- Hello ReactJS
- git合并历史提交
- 常用连续型分布介绍及R语言实现
- 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 数组属性和方法
- phpMyAdmin 渗透利用总结
- 【C++简明教程】C++基本语法
- 【多目标跟踪】搞不懂MOT数据集,会跑代码有啥用!
- 手工 - 内网信息收集
- 使用ffmpeg压缩视频之烦和fun
- 一文学会 Web Service漏洞挖掘!
- 【实战项目代码分享】计算机视觉入门教程&实战项目代码
- Linux部署DNS服务器
- 【C++简明教程】C++简介与环境配置
- PDF 的各种操作,我用 Python 来实现(附网站和操作指导)
- Python中map()函数用法
- 谈谈不同思路下造就的不同产品与公司形态
- OpenCV 处理中文路径、绘制中文文字的烦恼,这里通通帮你解决!
- 如何快速分析大型系统架构?
- Linux小技巧、文件查找、修改、读取