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

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

示例 1:

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

示例 2:

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

说明:

所有输入只包含小写字母 a-z 。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-common-prefix

 

分析:

方法1:找到最短的的字符串,然后拿最短字符串的每个字母去所有字符串中验证(验证该字符在每个字符串中都存在)

时间复杂度:O(S),S为所有字符串中字符数量的总和

最好情况:O(N*minL),N为字符串数量,minl为最短字符串的数量

最坏情况:O(N*M)(N个长度为M的相同字符串)

空间复杂度:O(1)

 

方法2:找到最短字符串,然后对最短字符串的长度进行二分,每次得到长度mid,就去验证长度mid是否符合要求(验证方法:看看所有字符串的前mid个字符是否相同)

时间复杂度:O(S*log(minl)),S为所有字符串的字符数量,minl为最短字符串的长度

空间复杂度:O(1)

 

方法1:

class Solution {
public:
string longestCommonPrefix(vector<string>& v)
{
int n=v.size();
if(n==)
return "";
if(n==)
return v[];
int minl=INT_MAX;
int index=;
for(int i=;i<n;i++)
{
int k=v[i].size();
if(k<minl)
{
minl=k;
index=i;
}
}
string ans;
for(int j=;j<=minl;j++)
{
for(int i=;i<n;i++)
{
if(v[i][j]==v[index][j])
continue;
else
return ans;
}
ans+=v[index][j];
}
return ans;
}
};

方法2:

class Solution {
public:
string longestCommonPrefix(vector<string>& v)
{
int n=v.size();
if(n==)
return "";
if(n==)
return v[];
if(n==&&v[]==v[])
return v[];
int minl=v[].length();
for(int i=;i<n;i++)
{
int k=v[i].size();
if(v[i][]!=v[i-][])
return "";
if(k==)
{
return "";
}
if(k<minl)
{
minl=k;
}
}
string ans=v[].substr(,);
int start=;
int end=minl;
while(start<=end)
{
int mid=(start+end)/;
string str=v[]; int flag=;
for(int i=;i<n;i++)
{
if(str.substr(,mid)!=v[i].substr(,mid))
{
flag=;
break;
}
}
if(flag==)
{
start=mid+;
ans=str.substr(,mid);
}else
{
end=mid-;
}
}
return ans;
}
};

 

【LeetCode】最长公共前缀【二分】的更多相关文章

  1. leetcode 最长公共前缀

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

  2. LeetCode 最长公共前缀(探索字节跳动)

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

  3. 每日一道 LeetCode (5):最长公共前缀

    前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub: https://github.com/meteor1993/LeetCode Gitee: https://gitee.com ...

  4. LeetCode 14 Longest Common Prefix(最长公共前缀)

    题目链接:https://leetcode.com/problems/longest-common-prefix/?tab=Description   Problem: 找出给定的string数组中最 ...

  5. LeetCode:最长公共前缀【14】

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

  6. 【LeetCode】Longest Common Prefix(最长公共前缀)

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

  7. 【Leetcode】【简单】【14最长公共前缀】【JavaScript】

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

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

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

  9. # Leetcode 14:Longest Common Prefix 最长公共前缀

    公众号:爱写bug Write a function to find the longest common prefix string amongst an array of strings. If ...

随机推荐

  1. application内置对象

    application 实现用户间的数据共享,可存放全局变量 setAttribute() getAttribute() getServerInfo(); //获取引擎名和版本号,如:Apache T ...

  2. modbus-poll和modbus-slave工具的学习使用——环境搭建

    在modbus的学习工具中,非modbus-poll和modbus-slave莫属了,在电脑上模拟的过程中,两者缺一不可 ,当然还需要虚拟串口工具:Configure Virtual Serial P ...

  3. 【BZOJ4237】 稻草人 CDQ分治+单调栈

    ## 题目描述 JOI村有一片荒地,上面竖着N个稻草人,村民们每年多次在稻草人们的周围举行祭典. 有一次,JOI村的村长听到了稻草人们的启示,计划在荒地中开垦一片田地.和启示中的一样,田地需要满足以下 ...

  4. learning scala repreated parameters

  5. hibernate的持久化类、主键生成策略

    一.hibernate的持久化类 1.什么是持久化类: 持久化:将数据存储到关系型数据库. 持久化类:与数据库中的数据表建立了某种关系的java类.(持久化类=javabean+映射配置文件) 2.持 ...

  6. c博客作业01——顺序 分支结构

    本章学习总结 1.1 学习内容总结 ·学习switch分支的使用,switch后加括号(),括号内填一个变量或字符 如 switch (a) { case 2: case 3: default: } ...

  7. 缺陷的优先程度(Priority)

    测试人员希望程序员什么时间哪个版本修改该bug (1)Urgent 立即修改否则影响开发进度 (2)Veryhigh 本版本修改 (3)High 下个版本修改 (4)Medium 发布前修改 (5)L ...

  8. hbase 监控指标项

    名词解释 JMX:Java Management Extensions,用于用于Java程序扩展监控和管理项 GC:Garbage Collection,垃圾收集,垃圾回收机制 指标项来源 主机名 u ...

  9. manjaro web

    https://wiki.manjaro.org/index.php?title=Main_Page https://forum.manjaro.org/ https://gitlab.manjaro ...

  10. rust猜数游戏代码

    use std::io; use rand::Rng; use std::cmp::Ordering; fn main() { println!("Guess the number!&quo ...