方法一(纵向扫描)

解题思路

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

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

代码及注释

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. SP2-0642: SQL*Plus internal error state 2130, context 0:0:0

    ..experience, Working case SP2-0642: SQL*Plus internal error state 2130, context 0:0:0 2016-10-09 没有 ...

  2. HLSL效果框架-多光源效果

    原文:HLSL效果框架-多光源效果 昨日不可追, 今日尤可为.勤奋,炽诚,不忘初心 手机淘宝二维码 扫描       或者打开连接:程序设计开发 ,掌声鼓励,欢迎光临.     高级着色器语言(HLS ...

  3. tp3 key json 分页

    //json 强制转换为array $arr[$key]['checkpro'] = json_decode($val['checkpro'],JSON_FORCE_ARRAY);    $arr[$ ...

  4. 容器安全拾遗 - Rootless Container初探

    摘要: Docker和Kubernetes已经成为企业IT架构的基础设施,安全容器运行时越来越被关注.近期Docker 19.03中发布了一个重要的特性 “Rootless Container”,在提 ...

  5. HZOJ string

    正解炸了…… 考试的时候想到了正解,非常高兴的打出来了线段树,又调了好长时间,对拍了一下发现除了非常大的点跑的有点慢外其他还行.因为复杂度算着有点高…… 最后正解死于常数太大……旁边的lyl用同样的算 ...

  6. @codeforces - 1186F@ Vus the Cossack and a Graph

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个 n 点 m 边的图(n, m<=10^6),记第 ...

  7. 新浪微博API错误代码说明对照表 http://open.weibo.com/wiki/Error_code

    http://open.weibo.com/wiki/Error_code 这篇文章资料是从新浪微博开发平台分享过来,一方面是博主自己开发过程遇到问题对错误代码的快捷查询,不用每次都得到官方找:另一方 ...

  8. html设计时 img与元素存在间距的处理

    在学习开发笔书奇小说网站时,遇到一下问题 问题点: 在初始化CSS中设置了img的padding和margin为0,可是在插入img后,img与父元素仍然有一定间距. 原因分析: 文字图片等inlin ...

  9. HDU 2602Bone Collector 01背包问题

    题意:给出一个t代表有t组数据,然后给出n,n代表有n种石头,v代表旅行者的背包容量,然后给出n种石头的价值和容量大小,求能带走的最大价值 思路:01背包问题,每种石头只有拿与不拿两种状态.(其实我是 ...

  10. jieba分词工具的使用方法

    作为我这样的萌新,python代码的第一步是:#coding=utf-8 环境:python3.5+jieba0.39 一.jieba包安装方法: 方法1:使用conda安装 conda instal ...