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

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

示例 1:

输入: ["flower","flow","flight"]
输出: "fl"

示例 2:

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

一.解题思路

  1) 采用反向思维,将第一个字符串作为基准串,然后使用两层循环,第一层扫描str[0][0:m]的每个元素,第二层,判断str[1:n]每个字符串的每个元素与str[0]是否相等,不等就返回退出

  2) leetcode评论区有人会先找整个输入中最短的那个字符串,然后再去比较,这样避免了扫描时,由于基准串长,其他串短而导致的越界错误问题。为了简略代码,其实可以不用这样做,只需要判断当前下标是否已经到达某个字串的上限,如果到达 ,立即返回即可。C++中应该是不需要,因为C++字符串的结尾有个’\0‘,遇到’\0‘时判断也会不相等直接返回即可,但是Python中字符串貌似没有'\0',因此python代码需要加该条件的判断。

二.代码实现

C++实现

 string Solution::LongestCommonPrefix(vector<string> &str)
{
if(str.empty()||str[].empty())
return "";
int key_i = ;
for(key_i=; key_i<str[].size(); key_i++){
for(int index=; index<str.size(); index++){
if(str[index][key_i]!= str[][key_i]){
goto Exit; //just to exit the Double loop
}
}
}
Exit:
return (key_i==)?"":str[].substr(,key_i);
}

经验贴士:

  1) 学习到了vector向量的简单使用方法,待扩展

  2) 了解到了一种退出多层循环的方式,一般来说采用goto也是一种不错的方式,但是必须保证goto仅有这个一处应用,goto作为一个强大而又可以胡作非为的用法,还是少用为主

  3) 学到了string的简单用法,包括定义一个空字串可以不用赋值,string的函数也不可以返回NULL,待扩展

  4) 一种寻找公共字符串时所需要考虑的反向思维,正向思维深度比较深,我们直接考虑反向思维的状况。

Python实现

 class Solution:
def longestCommonPrefix(self, strs)->str:
if len(strs) == 0 or len(strs[0]) == 0:
return ""
for i in range(len(strs[0])):
for j in range(1,len(strs)):
if i >= len(strs[j]) or strs[0][i] != strs[j][i]:
return strs[0][0:i]
return strs[0]

经验贴士:

  1)  python中在定义类的方法时,self代表类的实例,self在定义类的方法时必须有,即使不必传入相应的参数

  2)python中没有指针的概念,因此空字符串的表示直接返回""即可

  3)  range使用的一些大概方法

  4)  python中对变量的类型其实没有明确的定义,可以在参数和返回值时指定

【LC_Lesson5】---求最长的公共前缀的更多相关文章

  1. 014 Longest Common Prefix 查找字符串数组中最长的公共前缀字符串

    编写一个函数来查找字符串数组中最长的公共前缀字符串. 详见:https://leetcode.com/problems/longest-common-prefix/description/ 实现语言: ...

  2. 求最长连续公共子序列 POJ 3080

    Description The Genographic Project is a research partnership between IBM and The National Geographi ...

  3. LeetCode 7最长公共前缀

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

  4. leetcode_最长公共前缀

    题目:Write a function to find the longest common prefix string amongst an array of strings. 题解:给出的函数为: ...

  5. LeetCode OJ:Longest Common Prefix(最长公共前缀)

    Write a function to find the longest common prefix string amongst an array of strings. 求很多string的公共前 ...

  6. LeetCode刷题-最长公共前缀(简单)

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

  7. hdoj1423 最长上升公共子序列

    hdoj1423 题目分析: 两个数组a[n1] , b[n2], 求最长上升公共子序列. 我们可用一维存储 f[i] 表示 b 数组以 j 结尾, 与 a[] 数组构成的最长公共上升子序列. 对数组 ...

  8. LeetCode第十四题-字符串数组中最长的共同前缀

    Longest Common Prefix 问题简介: 编写一个函数来查找字符串数组中最长的公共前缀字符串,如果没有公共前缀,则返回空字符串"" 举例: 1: 输入: [“xwq” ...

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

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

随机推荐

  1. 【codeforces 764B】Timofey and cubes

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  2. P1034 台阶问题一

    题目描述 有 \(N\) 级的台阶,你一开始在底部,每次可以向上迈最多2级台阶(最少1级),问到达第 \(N\) 级台阶有多少种不同方式. 输入格式 一个正整数 \(N(\le 20)\) . 输出格 ...

  3. linux 让出处理器

    如我们已见到的, 忙等待强加了一个重负载给系统总体; 我们乐意找出一个更好的技术. 想到的第一个改变是明确地释放 CPU 当我们对其不感兴趣时. 这是通过调用调度函数而 实现地, 在 <linu ...

  4. jQuery 工具类函数-检测对象是否为空

    在jQuery中,可以调用名为$.isEmptyObject的工具函数,检测一个对象的内容是否为空,如果为空,则该函数返回true,否则,返回false值,调用格式如下: $.isEmptyObjec ...

  5. Linux 内核 设备结构嵌入

    设备结构包含设备模型核心需要的来模型化系统的信息. 大部分子系统, 但是, 跟踪关于 它们驻留的设备的额外信息. 结果, 对设备很少由空设备结构所代表; 相反, 这个结构, 如同 kobject 结构 ...

  6. dotnet Framework 源代码 类库的意思

    本文告诉大家 dotnet framework 的源代码类库的意思 下面列出来 dotnet framework 源代码的各个类库的作用. System System 命名空间包含基本类和基类,这些类 ...

  7. 【u033】地震逃生

    Time Limit: 1 second Memory Limit: 64 MB [问题描述] 汶川地震发生时,四川**中学正在上课,一看地震发生,老师们立刻带领x名学生逃跑,整个学校可以抽象地看成一 ...

  8. Linux使用expect和rsync实现密码自动输入无人值守自动同步备份

    我们常用sudo,ssh.ftp命令操作服务器或者修改权限的时候都会要求输入password,但是shell脚本运行中该如何交互实现自动输入密码呢? 下面总结三种实现方法. 一.重定向:用重定向方法实 ...

  9. 对QT中QBitArray类进行简单剖析

    我们知道Qt中的QBitArray类支持在位(bit)的层次上进行数据操作.本文剖析该类在二进制文件读写时的一些要点.另外,在Qt中,QDataStream类对于二进制文件的读写提供了诸多便利,需要注 ...

  10. 使用springboot + druid + mybatisplus完成多数据源配置

    一. 简介 1. 版本 springboot版本为2.0.3.RELEASE,mybatisplus版本为2.1.9, druid版本为1.1.9,swagger版本为2.7.0 2. 项目地址   ...