编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 ""。

输入: ["flower","flow","flight"]
输出: "fl"
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。

首先理解题意:

  • 当源字符串数组中一个元素也没有,那肯定是返回空字符串了

        slen := len(strs)
    //特殊情况,当切片中没有任何元素的时候返回""
    if slen=={
    return ""
    }
  • 而最坏的情况就是得到源数组中长度最小的字符串,那我们就要找到最小长度的字符串了
    //找出最小长度的字符串、字符串长度以及索引
minLen := math.MaxInt32
minIndex :=
minLenStr := ""
for i := ; i < slen; i++ {
if len(strs[i]) < minLen {
minLen = len(strs[i])
minIndex = i
minLenStr = strs[i]
}
}
  • 然后我们就可以对源字符串中的每一个元素与最小长度的那个字符串比较了,但是考虑到空间和时间的问题,我们可以先把源字符串中的那个最小长度的字符串去掉,然后再进行比较

        //先对上面得到的最小长度的字符串进行for循环,得到每一个字符
    //然后对源切片strs剩下的元素进行for循环,得到strs中每个元素的第一位字符,与最小长度得到的字符相比
    //最后把相同的字符加到返回值中去
    for _, c := range minLenStr {
    for z := ; z < len(strs); z++ {
    if string(c) == string(strs[z][]) {
    strs[z] = strs[z][:]
    } else {
    return result
    }
    }
    result += string(c)
    }
    return result

    这里有个小技巧,就是每次只比对源字符串数组剩下的元素的第一位,如果是与最小字符串对应位置的一样,那我们就把源字符串数组对应的元素去除掉第一个字符

    整体代码:
    func longestCommonPrefix(strs []string) string {
    result := ""
    slen := len(strs)
    //特殊情况,当切片中没有任何元素的时候返回""
    if slen=={
    return ""
    } //找出最小长度的字符串、字符串长度以及索引
    minLen := math.MaxInt32
    minIndex :=
    minLenStr := ""
    for i := ; i < slen; i++ {
    if len(strs[i]) < minLen {
    minLen = len(strs[i])
    minIndex = i
    minLenStr = strs[i]
    }
    } //在strs去除掉长度最小的字符串
    strs = append(strs[:minIndex], strs[minIndex+:]...) //先对上面得到的最小长度的字符串进行for循环,得到每一个字符
    //然后对源切片strs剩下的元素进行for循环,得到strs中每个元素的第一位字符,与最小长度得到的字符相比
    //最后把相同的字符加到返回值中去
    for _, c := range minLenStr {
    for z := ; z < len(strs); z++ {
    if string(c) == string(strs[z][]) {
    strs[z] = strs[z][:]
    } else {
    return result
    }
    }
    result += string(c)
    }
    return result
    }

    当然我们也有另外一种思考方式,那就是比较不一样的,当不一样,那我们就返回源切片的对应元素的对应索引,不然就直接返回最小长度的字符串

        for i, c := range minLenStr {
    for z := ; z < len(strs); z++ {
    if strs[z][i] != byte(c) {
    return strs[z][:i]
    }
    }
    }
    return minLenStr

最长公共前缀的golang实现的更多相关文章

  1. [转][LeetCode]Longest Common Prefix ——求字符串的最长公共前缀

    题记: 这道题不难但是很有意思,有两种解题思路,可以说一种是横向扫描,一种是纵向扫描. 横向扫描:遍历所有字符串,每次跟当前得出的最长公共前缀串进行对比,不断修正,最后得出最长公共前缀串. 纵向扫描: ...

  2. lintcode :最长公共前缀

    题目 最长公共前缀 给k个字符串,求出他们的最长公共前缀(LCP) 样例 在 "ABCD" "ABEF" 和 "ACEF" 中,  LCP ...

  3. LeetCode Longest Common Prefix 最长公共前缀

    题意:给多个字符串,返回这些字符串的最长公共前缀. 思路:直接逐个统计同一个位置上的字符有多少种,如果只有1种,那么就是该位是相同的,进入下一位比较.否则终止比较,返回前缀.可能有一个字符串会比较短, ...

  4. 扩展KMP--求字符串S的所有后缀和字符串T的最长公共前缀

    在解上面这个问题前我们要先解决一个类似的问题:求字符串s的所有后缀和s本身的最长公共前缀: 我们用next[]数组保存这些值: 现在我们假设要求next[ x ],并且next[ i ] 0<i ...

  5. BNUOJ34990--Justice String (exkmp求最长公共前缀)

    Justice String Given two strings A and B, your task is to find a substring of A called justice strin ...

  6. [Swift]LeetCode14. 最长公共前缀 | Longest Common Prefix

    Write a function to find the longest common prefix string amongst an array of strings. If there is n ...

  7. [LeeCode]14. 最长公共前缀

    题目链接:https://leetcode-cn.com/problems/longest-common-prefix/ 题目描述: 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀 ...

  8. python(leetcode)-14最长公共前缀

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

  9. leetcode-14最长公共前缀

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

随机推荐

  1. VM虚拟机扩展硬盘容量

    VM虚拟机扩展硬盘容量 第一步,关闭系统,给虚拟机硬盘增加空间. 第二步,启动系统.查看硬盘大小和分区情况. 第三步,分区. 第四步,格式化分区. 第五步,挂载. 第六步,开机自动挂载. 第一步: 当 ...

  2. C语言第三讲,基本数据类型

    C语言第三讲,基本数据类型 一丶基本数据类型讲解 在C语言当中,有四种基本数据类型 分别是: 整形 浮点型 指针 聚合类型(数组和结构) 整型家族包括: 字符 短整型 整形 长整型 ** 都分为有符号 ...

  3. 《剑指offer》内容总结

    (1)剑指Offer——Trie树(字典树) Trie树 Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种.典型应用是统计和排序大量的字符串(但不仅限于字符串),所以经常 ...

  4. CEF C++环境搭建

    第一步:下载CEF 到这里下载最新版本的CEF http://cefbuilds.com/ 下载解压之后,大概会看到如下图所示的文件 cefclient:是一个比较复杂的示例代码cefsimple:是 ...

  5. ASP.NET MVC5 + EF6 + LayUI实战教程,通用后台管理系统框架(3)

    前言 本节将我们自己的CSS样式替换系统自带的 开始搭建 将脚本文件夹删掉,将内容文件夹里的内容删掉,将我们自己的CSS样式文件,全部复制到内容里边 新建家庭控制器 给家庭控制器添加索引视图 指数代码 ...

  6. oracle用户权限

    权限: create session create table unlimited tablespace connect resource dba 例: #sqlplus /nolog SQL> ...

  7. angularjs学习第九天笔记(指令作用域【隔离作用域】研究)

    您好,昨天学习了指令作用域为布尔型的情况, 今天主要研究其指针作用域为{}的情况 1.当作用域scope为{}时,子作用域完全创建一个独立的作用域, 此时,子做预约和外部作用域完全不数据交互 但是,在 ...

  8. 转STM32官方固件库简介

    ST(意法半导体)为了方便用户开发程序,提供了一套丰富的 STM32 固件库.固件库就是函数的集合,固件库函数的作用是向下负责与寄存器直接打交道,向上提供用户函数调用的接口(API) .固件库将这些寄 ...

  9. 【Java基础】9、Enumeration接口和Iterator接口的区别

    package java.util; public interface Enumeration<E> {     boolean hasMoreElements();     E next ...

  10. IronPython初体验

    介绍 在 C# 程序中嵌入 IronPython 得到了很好的支持.在本教程中,我们将展示如何完成这个项目. 首先,我们将展示两个非常基本的例子,说明如何执行一个不导入任何模块的非常简单的脚本.然后, ...