文章目录

  • 题目:最长公共前缀
    • 法一:暴力解法
      • 思路
      • 图解
      • 代码
    • 法二:两两对比法
      • 思路
      • 图解
      • 代码

题目:最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。

示例 1:
输入:

strs = ["flower","flow","flight"]

输出:

"fl"

示例 2:
输入:

strs = ["dog","racecar","car"]

输出:

""

这道题重点词是 “前缀”,即我们要寻找的公共子串部分是在每个单词index=0的位置开始累计的

法一:暴力解法

思路

result:记录最终的前缀字符串
flag:标志位,记录当前字符串是否符合我们的要求
temp:候选字符串

因为提取的是前缀字符串,所以我们就选择strs数组中第一个元素作为基准。

外层循环 遍历strs中第一个元素的每个字母,这里我们用temp来存储累计的字符串。

那么内层循环遍历的是strs中的各个元素(即题目中strs数组的整个单词),判断 :

  • 如果候选字符串temp在各个元素的下标0位置都存在,那么这个候选字符串temp是成立的。且这个候选字符串的长度大于result字符串的长度,就将temp赋值给result。

  • 如果strs有任何一个元素头部并不符合候选字符串temp,那么给标志位赋一个false跳出内层循环(不再遍历判断strs之后的元素)。这时,再判断一次flag,并跳出外层循环(此时已计算出最长的前缀和)

图解

例如,题目中第一组数据中:

  1. i = 0 时, temp = 'f';
    strs[1]和strs[2]头部前缀符合temp,flag=true,进入下一次循环
  2. 因为上一次循环flag 为true,此时temp应加上strs[0]的后一个字母,即i = 1 时, temp = 'fl';
    strs[1]和strs[2]头部前缀符合temp,flag=true,进入下一次循环
  3. 同理,i = 2 时, temp = 'flo';
    但此时,strs[2]中却不符合temp的前缀和了,所以直接跳出循环,不将这次temp赋值给最终结果。

代码

/*** @param {string[]} strs* @return {string}*/
var longestCommonPrefix = function(strs) {var result = '';var temp = '';var flag = true;for (var i = 0; i < strs[0].length; i++) {temp += strs[0][i];for (var j = 1; j < strs.length; j++) {if (strs[j].indexOf(temp) !== 0) {flag = false;break;}}if (flag && (temp.length > result.length)) {result = temp;} else {break;}}return result.length > 0? result:"";
};

后面一想,这里其实根本不用判断result和temp的长度,既然前缀和一定是从0开始计算,那么候选字符串temp的长度后一个总是比前一个更长的。
所以可以把 (temp.length > result.length) 长度判断去掉

法二:两两对比法

思路

首先选取strs第一个元素作为ans(比较字符串),然后将strs剩下的所有元素和ans都两两比较一遍,在每次比较中都截取头部相同的字符串部分。

图解

  1. 将strs[0]作为and,比较字符串,剩下两个分别为strs[1],strs[2]

  2. 第一次将ans与strs[1]比较,发现相同的是"flo",故此时ans变为"flo"(红框圈起部分)

  3. 第二次将ans与strs[2]比较,相同字符串为"fl"此时ans变为"fl"

经过两次比较之后,最终的最长公共前缀就出来, 就是"fl"

代码

/*** @param {string[]} strs* @return {string}* 解法:两两比较*/
var longestCommonPrefix = function(strs) {var ans = strs[0];for (var i = 1; i < strs.length; i++) {for (var j = 0; j < strs[i].length && j < ans.length; j++) {if (strs[i][j] !== ans[j]) {break;}}ans = ans.substring(0, j);if (ans.length == 0) {return "";}}return ans;
};

leetcodeT14-最长公共前缀(两种解法+图解)相关推荐

  1. java两个字符串前缀_java – 找到两个字符串的最长公共前缀

    我想找到两个字符串的最长公共前缀. 有没有办法循环我的最后几个if语句,以便我可以结束彼此不匹配的最后几个字符? System.out.println("Enter the first st ...

  2. LeetCode4_编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ““。(解决方案:横向扫描、 纵向扫描 、分治 二分查找 、秀儿操作之排序比较头尾)

    题目 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower","flow&q ...

  3. LeetCode 第 59 场力扣夜喵双周赛(最短路径数+迪杰斯特拉、动态规划+最长公共前缀问题) / 第255场周赛(二进制转换,分组背包,子集还原数组(脑筋急转弯))

    第 59 场力扣夜喵双周赛 两道400多五百,后两道都写出代码来了,但是都有问题,哭辽- 还有刚开始第一道测试好慢,搞心态了 5834. 使用特殊打字机键入单词的最少时间 有一个特殊打字机,它由一个 ...

  4. CSU1632Repeated Substrings(后缀数组/最长公共前缀)

    题意就是求一个字符串的重复出现(出现次数>=2)的不同子串的个数. 标准解法是后缀数组.最长公共前缀的应用,对于样例aabaab,先将所有后缀排序: aab 3    aabaab 1    a ...

  5. LeetCode 13罗马数字转整数14最长公共前缀

    罗马数字转整数 上一题是整数转罗马数字,这题是罗马数字转整数.虽然是简单题,但我感觉其实有点烦. 上一次是数字转字符,这次是字符转数字,总的来说大体思想还是差不多的. 首先整个字符串可能是这样构造的: ...

  6. 最长公共前缀(java实现)

    题目: 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower","flow& ...

  7. 2019-03-5-算法-进化(最长公共前缀)

    题目描述 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower","flow ...

  8. LeetCode刷题记录_最长公共前缀

    编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower","flow" ...

  9. 14.最长公共前缀-LeetCode

    1.问题描述 这里直接采用的是leetcode上面的问题描述 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 下面给出示例: 2.解题思路 ...

最新文章

  1. Java 8 简明教程
  2. 【Python-ML】SKlearn库多元线性回归性能评估
  3. linux中find命令的35个实际例子
  4. 如何结合SharePoint Designer 2010 与Visio 2010 创建工作流?
  5. 前端学习(2973):配置嵌套路由
  6. 前端学习(2960):实现发送axios请求
  7. MySQL表的操作(二)
  8. SpringCloud常见面试题(2020最新版)
  9. 疫情下的国内云市场,正是大展拳脚的好时机!
  10. 景驰无人车披露最新技术进展,2年后开启国内规模化运营 | 视频
  11. 稳的一比,鸿蒙系统霸榜Github!
  12. 邬建国教授受聘为浙江大学光彪教授
  13. android 15 activity跳转
  14. python cmath模块_python-cmath模块
  15. 俄罗斯方块菜单c语言,飞机游戏、俄罗斯方块、贪吃蛇C语言代码
  16. 嵌入式系统框架----软件篇
  17. aligned_alloc
  18. AT32F437VM SPI驱动AT7456E OSD芯片
  19. 研究生放假因疫情未按时返回,扣助研补贴!实验室奇葩规定引热议
  20. IMU内参标定以及初始化(9轴IMU,比6轴多三个姿态角信息)

热门文章

  1. iOS项目中常见定时器
  2. 0320 关于构建之法前三章的读后感
  3. 贪心法解部分背包问题
  4. Silverlight 3 OOB 原理
  5. Ext JS 3.2.0发布(转)
  6. Vue3核心概念、新特性及与Vue2的区别
  7. 用纯css3和html制作一些泡沫对话框
  8. JS 基础知识点及常考面试题(二)
  9. 线性表中顺序表基本运算的实现---数据结构(C)
  10. php的crypt,php使用crypt()函数进行加密