方法一(纵向扫描)

解题思路

先计算出数组中最小的字符串长度,这样就避免了越界的情况,思路更加明确,但同时时间复杂度就相应的上升了。

先计算所有字符串在同一列上的字符是否相同,然后依次向后延伸。

代码及注释

class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
//如果数组中没有字符串,则直接返回空字符串
if(strs.size()==) return "";
//结果字符串
string ans = "";
int n = strs[].size();
for(int i=;i<strs.size();i++){
if(strs[i].size()<n){
n=strs[i].size();
}
}
//利用前一个和后一个字符串所对应的字符是否相等判断是否具有公共前缀
//没有则直接退出返回当前ans
int flag = ;
for(int i=;i<n;i++){
for(int j=;j<strs.size()-;j++){
if(strs[j][i]!=strs[j+][i]){
flag = ;
break;
}
}
if(flag==){
return ans;
}
ans+=strs[][i];
}
return ans; }
};

方法二(水平扫描法)

思路

将第一个字符作为ans,然后不断和后面的字符串进行计算他们的公共前缀然后更新,最后的结果即为最长公共前缀

代码及注释

class Solution {
public:
//返回两个字符串的公共前缀
string CommonPrefix(string a,string b){
int i=,j=;
string t = "";
while(i<a.size()&&j<b.size()&&a[i]==b[j]){
t+=a[i];
i++;
j++;
}
return t;
}
string longestCommonPrefix(vector<string>& strs) {
//数组长度为0返回空字符串
if(strs.size()==) return "";
//数组长度为1返回第一个字符串
if(strs.size()==) return strs[];
//将第一个字符串作为ans,不断与后面的字符串计算公共前缀然后更新ans,如果ans为空则直接返回ans;
string ans = strs[];
for(int i=;i<strs.size();i++){
ans = CommonPrefix(ans,strs[i]);
if(ans=="") return ans;
}
return ans;
}
};

方法三(分治法)

思路

代码及注释

class Solution {
public:
//返回两个字符串的公共前缀
//也是分治法的合
string merge(string a,string b){
int i=,j=;
string t = "";
while(i<a.size()&&j<b.size()&&a[i]==b[j]){
t+=a[i];
i++;
j++;
}
return t;
}
//分治法的分
string divide(vector<string>& strs,int left,int right){
//当分到最后只有一个字符串时直接返回,因为一个字符串的公共前缀就是他的本身
if(left==right){
return strs[left];
}else{
//将数组一分为二
int mid = (left+right)/;
string leftString = divide(strs,left,mid);
string rightString = divide(strs,mid+,right);
//再通过合并各个分组的公共前缀
return merge(leftString,rightString);
}
}
string longestCommonPrefix(vector<string>& strs) {
//数组长度为0返回空字符串
if(strs.size()==) return "";
//数组长度为1返回第一个字符串
if(strs.size()==) return strs[]; //利用分治法计算
return divide(strs,,strs.size()-);
}
};

最长公共前缀 leetcode 14的更多相关文章

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

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

  2. 14. 最长公共前缀----LeetCode

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

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

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

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

    14. 最长公共前缀 14. Longest Common Prefix 题目描述 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". Lee ...

  5. Java实现 LeetCode 14 最长公共前缀

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

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

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

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

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

  8. python刷LeetCode:14. 最长公共前缀

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

  9. 【LeetCode】14. Longest Common Prefix 最长公共前缀

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 个人公众号:负雪明烛 本文关键词:prefix, 公共前缀,题解,leetcode, 力扣 ...

随机推荐

  1. lattice planner 规划详解

    大家好,我是来自百度智能驾驶事业群的许珂诚.今天很高兴能给大家分享Apollo 3.0新发布的Lattice规划算法. Lattice算法隶属于规划模块.规划模块以预测模块.routing模块.高精地 ...

  2. 直击 KubeCon 现场 | 阿里云 Hands-on Workshop 亮点回顾

    相关文章链接[合集]规模化落地云原生,阿里云亮相 KubeCon China沉淀九年,一文看清阿里云原生大事件 2019 年 6 月 24 日至 26 日,KubeCon + CloudNativeC ...

  3. 阿里云BaaS:降低区块链应用门槛,用技术构建商业互信

    5月8日,阿里云召开区块链服务(BaaS)商业化发布会,会上对BaaS产品.业务应用场景及生态策略进行了全面解读. 对于广大IT服务商和开发者而言,构建区块链应用存在三大痛点问题:成本高,研发投入大. ...

  4. 模板—Hash_map

    struct Hash_map { ],nx[]; ];]; inline double &operator [] (int x) { ,i=fi[k]; for(;i&&st ...

  5. Java帮助文档打开索引就停止服务

    cmd: regsvr32 jscript.dllregsvr32 hhctrl.ocxregsvr32 itss.dllregsvr32 itircl.dll

  6. 21Hash算法以及暴雪Hash

    一:哈希表简介 哈希表是一种查找效率极高的数据结构,理想情况下哈希表插入和查找操作的时间复杂度均为O(1),任何一个数据项可以在一个与哈希表长度无关的时间内计算出一个哈希值(key),然后在常量时间内 ...

  7. php 位运算 3<<2;

  8. Python 基础09 面向对象的进一步拓展

    调用类的其他信息 上一讲中提到,在定义方法时,必须有self这一个参数,这个参数表示某个对象,对象有有类的所有性质, 那么我么可以通过self 调用类属性. class Human(object): ...

  9. 洛谷 1602 Sramoc问题

    Description 话说员工们整理好了筷子之后,就准备将快餐送出了,但是一看订单,都傻眼了:订单上没有留电话号码,只写了一个sramoc(k,m)函数,这什么东西?什么意思?于是餐厅找来了资深顾问 ...

  10. cp拷贝

    1 cp 拷贝.复制 NAME cp - copy files and directories SYNOPSIS cp [OPTION]... [-T] SOURCE DEST        -- c ...