方法一(纵向扫描)

解题思路

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

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

代码及注释

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. 巨蟒python全栈开发-第11阶段 ansible_project6

    今日大纲: 1.计划任务前端页面 2.计划任务新增实现 3.计划任务编辑 4.项目详情 5.文件上传 6.replace模块介绍 1.计划任务前端页面 2.计划任务新增实现 3.计划任务编辑 4.项目 ...

  2. Javascript中的定时调用函数setInterval()和setTimeout()

    首先介绍这两个函数 一.setInterval() 按照指定的周期来调用函数或表达式,执行多次.(时间单位:ms) timer = setInterval("content =documen ...

  3. oracle函数 UPPER(c1)

    [功能]将字符串全部转为大写 [参数]c1,字符表达式 [返回]字符型 [示例] SQL> select upper('AaBbCcDd') upper from dual; UPPER --- ...

  4. Python深入:Distutils发布Python模块

    Distutils可以用来在Python环境中构建和安装额外的模块.新的模块可以是纯Python的,也可以是用C/C++写的扩展模块,或者可以是Python包,包中包含了由C和Python编写的模块. ...

  5. Lambda plus: 云上大数据解决方案

    本文会简述大数据分析场景需要解决的技术挑战,讨论目前主流大数据架构模式及其发展.最后我们将介绍如何结合云上存储.计算组件,实现更优的通用大数据架构模式,以及该模式可以涵盖的典型数据处理场景. 大数据处 ...

  6. @bzoj - 3749@ [POI2015] Łasuchy

    目录 @description@ @solution@ @version - 1@ @version - 2@ @accepted code@ @version - 1@ @version - 2@ ...

  7. poj 1689 && zoj 1422 3002 Rubbery (Geometry + BFS)

    ZOJ :: Problems :: Show Problem 1689 -- 3002 Rubbery 这题是从校内oj的几何分类里面找到的. 题意不难,就是给出一个区域(L,W),这个区域里面有很 ...

  8. 很奇怪的问题(Chrome)

    <p>感觉这个问题跟Chrome浏览器本身的一些策略有关.</p> 在我写完登录页面后 准备美滋滋的登录验证下的时候,确一直卡在数据获取上了,查看NetWork,发现是Chro ...

  9. landi pos机

    2015年3月:联迪商用获得2014-2015中国金融POS机市场年度成功企业奖: 2014年5月:联迪商用入选2013年福州市纳税百强企业: 2013年12月:联迪商用入选2013年度中国电子商务物 ...

  10. css的一些小问题

    这是今天整理的笔记一.属性书写顺序: Formatting Model(布局方式.位置) > Box Model(尺寸) > Typographic(文本相关) > Visual(视 ...