题目如下:题目链接

横向前缀判断法,维护一个res字符串,针对每一个字符串进行搜索最长公共前缀。

func longestCommonPrefix(strs []string) string {alllen := len(strs)if alllen==0{return ""}res:=strs[0]for i:=1;i<alllen;i++{//对每一个字符串,进行最长前缀对比,返回最长前缀res = cp(res,strs[i])if len(res)==0{break}}return res
}func cp(a string,b string) string{ //最长前缀的最长长度总是最短的那个字符串l:=min(len(a),len(b))index:=0for index<l && a[index]==b[index]{//对比返回最长前缀index++}return a[:index]//因为访问字符串的单个位置返回的是一个字节,所以需要返回一个切片
}func min(a int,b int) int{if a<b{return a}return b
}

纵向前缀判断法,每次都判断整个字符串中相同位置的字符,匹配成功才能进入到下一个字符

func longestCommonPrefix(strs []string) string {for i:=0;i<len(strs[0]);i++{//根据第一个字符串长度寻找最长公共前缀,在后面的判断中寻找长度是否越界for j:=0;j<len(strs);j++{对每一个字符串的第i个字符进行比对if i==len(strs[j])|| strs[j][i]!=strs[0][i]{//判断是有长度更短的字符串或者前缀不等的字符串,有的返回i之前的字符return strs[0][:i]}}}return strs[0]
}

分治法,每次都将数据分成两部分进行对比,返回每个部分的最长前缀,再将前缀进行对比,最终返回共同前缀。

func longestCommonPrefix(strs []string) string {//分治法思想,将字符串平分为两组进行相互比较,比较出来的最长前缀再次进行比较,最终得出最长公共前缀if len(strs) == 0 {return ""}var cp func(int,int) string//定义递归函数,递归需要比较字符串的最长公共前缀cp = func(start int,end int) string{//实现函数if start==end{ //递归的终止条件为当范围内只有当前字符串,则返回当前字符串return strs[start]}mid:=(start+end)/2  //分治,每次都将字符串分割称为两组cpl,cpr:= cp(start,mid),cp(mid+1,end)//分成两组后再次调用递归函数,当范围内只有一个字符串时返回当前字符串,否则返回两边的最长公共前缀minLength:=min(len(cpl), len(cpr))//返回的两边最短公共前缀,因为重叠需要最短重叠for i:=0;i<minLength;i++{//判断两边的前缀的最长前缀if cpl[i]!=cpr[i]{ //不等则返回最长前缀return cpl[:i]}}return cpl[:minLength]//全都相等则minlengh长的前缀}return cp(0,len(strs)-1)//递归入口
}func min(x,y int) int{if x<y {return x}return y
}

二分法,通过二分法判断最长公共前缀的下标,每次寻找low、high之间的最长公共前缀,判断是否重合,当low>high时说明字符串最终位置已经找到,即[0:low-1]。

func longestCommonPrefix(strs []string) string {if len(strs) == 0 {return ""}//判断前缀是否相等函数,将mid值传进来,判断mid值前的前缀是否相等,返回boolisequal:=func(lenth int) bool{str0,count:=strs[0][:lenth],len(strs)for i:=1;i<count;i++{if strs[i][:lenth]!=str0{return false}}return true}minLenth:=len(strs[0])for _,s :=range(strs){//计算最短字符串长度if len(s)<minLenth{minLenth=len(s)}}low,high:=0,minLenth//则low high则为判断边界for low<high{//当low>=high是,即当当前low值前不为最长前缀边界,则返回low之前的前缀,因为此时已经判断了前面的字符前缀为公共前缀mid:=(high-low+1)/2+lowflag:=isequal(mid)if flag{low=mid}else{high=mid-1}}return strs[0][:low]
}

LeetCode笔记05:最长公共前缀相关推荐

  1. Leetcode刷题-最长公共前缀

    Leetcode刷题-最长公共前缀 简介 题目 个人答案及结果 学习一下官方的 简介 最近尝试下大家口口相传的神器 leetcode-cn.com,大家自己注册就可以选择题库进行使用了.我都会先自己出 ...

  2. 刻意练习:LeetCode实战 -- Task14. 最长公共前缀

    背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务.本期训练营采用分类别练习的模式,即选择了五个知识点(数组.链表.字符串.树.贪心算法),每个知 ...

  3. LeetCode实战:最长公共前缀

    题目英文 Write a function to find the longest common prefix string amongst an array of strings. If there ...

  4. 【Leetcode | easy】最长公共前缀

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

  5. 20190825:(leetcode习题)最长公共前缀

    最长公共前缀 题目 大致思路 代码实现 题目 大致思路 我们以第一个字符串为准,将后面的字符串与第一个进行比较即可. 比较时,将后续字符串依次与第一个字符串逐字符进行对比,相同的则append到Str ...

  6. leetcode系列-14. 最长公共前缀

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

  7. leetcode算法题--最长公共前缀

    原文链接:https://leetcode-cn.com/problems/longest-common-prefix/ 纵向扫描 string longestCommonPrefix(vector& ...

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

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

  9. 【最长公共前缀】算法优化笔记

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

最新文章

  1. php--------返回404状态
  2. 实战脚本写入注册表,完善WindowsServer自动化运维
  3. OpenCASCADE:Foundation Classes之集合、字符串、数量和单位转换
  4. 参与Apache顶级开源项目的N种方式,Apache Dubbo Samples SIG 成立!
  5. 31.javaweb简介
  6. 施一公的三位杰出女弟子
  7. Android多线程之IntentService源码解析
  8. JAVA中for循环缩制表位_用vim中的空格替换制表符
  9. ios页面间传递参数四种方式
  10. 单片机仿真软件Proteus8.0的安装及使用
  11. g4600黑苹果efi_Hackintosh黑苹果长期维护机型EFI列表及安装教程整理
  12. 双线性变换(Tustin transform/bilinear transformation)
  13. python比赛2020_2020LPL春季赛3月15日比赛数据的数据分析(Python)
  14. B站还有多久成为天涯
  15. 转录组学分析之基因芯片的预处理
  16. 四小龙变“四小虫”?AI独角兽们的AI+故事好不好讲?
  17. Java聊天室系统(三):图形界面窗口展示
  18. 如何解决wup.exe文件占用cpu资源
  19. (转)视觉工程师笔试知识汇总
  20. 大航海日志--do rome as romans do

热门文章

  1. 【李宏毅机器学习】TransFormer框架基础储备知识(p51) 学习笔记 | 全程手码,放心食用
  2. 计算机磁盘怎么更改,如何对电脑中的磁盘盘符号进行修改?
  3. 如何修改IMX6UL开发板时钟配置?
  4. 怎么查看笔记本内存条型号_新买的笔记本如何查看笔记本内存条型号有哪些方法...
  5. uploadify java 下载_java uploadify 实现文件上传
  6. Fourier Neural Operator for Parametric Partial Differential Equations
  7. oracle 学号为主键,oracle上机练习1
  8. 分布式Ruby解决之道 - DRb
  9. 【好数推荐】数据堂平均音色语音库
  10. 性能优化--启动优化(网易云音乐启动方案)