【LC_Lesson5】---求最长的公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 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】---求最长的公共前缀的更多相关文章
- 014 Longest Common Prefix 查找字符串数组中最长的公共前缀字符串
编写一个函数来查找字符串数组中最长的公共前缀字符串. 详见:https://leetcode.com/problems/longest-common-prefix/description/ 实现语言: ...
- 求最长连续公共子序列 POJ 3080
Description The Genographic Project is a research partnership between IBM and The National Geographi ...
- LeetCode 7最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower","flow" ...
- leetcode_最长公共前缀
题目:Write a function to find the longest common prefix string amongst an array of strings. 题解:给出的函数为: ...
- LeetCode OJ:Longest Common Prefix(最长公共前缀)
Write a function to find the longest common prefix string amongst an array of strings. 求很多string的公共前 ...
- LeetCode刷题-最长公共前缀(简单)
题目描述 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower","flow ...
- hdoj1423 最长上升公共子序列
hdoj1423 题目分析: 两个数组a[n1] , b[n2], 求最长上升公共子序列. 我们可用一维存储 f[i] 表示 b 数组以 j 结尾, 与 a[] 数组构成的最长公共上升子序列. 对数组 ...
- LeetCode第十四题-字符串数组中最长的共同前缀
Longest Common Prefix 问题简介: 编写一个函数来查找字符串数组中最长的公共前缀字符串,如果没有公共前缀,则返回空字符串"" 举例: 1: 输入: [“xwq” ...
- BNUOJ34990--Justice String (exkmp求最长公共前缀)
Justice String Given two strings A and B, your task is to find a substring of A called justice strin ...
随机推荐
- 2018-8-10-VisualStudio-自定义外部命令
title author date CreateTime categories VisualStudio 自定义外部命令 lindexi 2018-08-10 19:16:53 +0800 2018- ...
- UVa 1627 - Team them up!——[0-1背包]
Your task is to divide a number of persons into two teams, in such a way, that: everyone belongs to ...
- 【t046】牛跳
Time Limit: 1 second Memory Limit: 128 MB [问题描述] John的奶牛们计划要跳到月亮上去.它们请魔法师配制了P(1 <= P <=150,000 ...
- 2018-9-3-C#-const-和-readonly-有什么区别
title author date CreateTime categories C# const 和 readonly 有什么区别 lindexi 2018-9-3 16:52:7 +0800 201 ...
- Hamcrest Tutorial
Java Hamcrest Home Hamcrest Tutorial Introduction Hamcrest is a framework for writing matcher object ...
- 2018-2-13-win10-uwp-图标制作器
title author date CreateTime categories win10 uwp 图标制作器 lindexi 2018-2-13 17:23:3 +0800 2018-2-13 17 ...
- vue-learning:19 - js - filters
filters 基本使用 仅限在插值{{}}和v-bind指令中使用 管道符|分隔 链式调用 传入参数 全局注册和局部注册 纯函数性质(不能使用this) 基本使用 我们看下之前用计算属性实现的例子, ...
- Latex 公式速查
本文记录了一些常用的数学公式对应的 Latex 字符,用于快速查找需要的字符 所有的在 Latex 使用的字符公式,都需要放在\(和\),$ 和 $,\begin{math} 和\end{math}之 ...
- boostrap-非常好用但是容易让人忽略的地方【2】:row
row是非常好用但是却非常容易忽略的地方. 想实现内部元素相对父级的padding=0,则在父子中间加个row.如下图 列嵌套也是同样的道理 经验之谈:学会row的用法,在手机版布局的时候会很方便,否 ...
- 在windows+nginx的curl操作请求超时的问题
之前的项目在apache下进行本地curl操作的时候请求不会超时 后来要在nginx下开发的时候,我在项目中写一个curl操作的test.php文件,请求相同项目下的一个index.php文件,然后c ...