方法一(纵向扫描)

解题思路

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

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

代码及注释

  1. class Solution {
  2. public:
  3. string longestCommonPrefix(vector<string>& strs) {
  4. //如果数组中没有字符串,则直接返回空字符串
  5. if(strs.size()==) return "";
  6. //结果字符串
  7. string ans = "";
  8. int n = strs[].size();
  9. for(int i=;i<strs.size();i++){
  10. if(strs[i].size()<n){
  11. n=strs[i].size();
  12. }
  13. }
  14. //利用前一个和后一个字符串所对应的字符是否相等判断是否具有公共前缀
  15. //没有则直接退出返回当前ans
  16. int flag = ;
  17. for(int i=;i<n;i++){
  18. for(int j=;j<strs.size()-;j++){
  19. if(strs[j][i]!=strs[j+][i]){
  20. flag = ;
  21. break;
  22. }
  23. }
  24. if(flag==){
  25. return ans;
  26. }
  27. ans+=strs[][i];
  28. }
  29. return ans;
  30.  
  31. }
  32. };

方法二(水平扫描法)

思路

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

代码及注释

  1. class Solution {
  2. public:
  3. //返回两个字符串的公共前缀
  4. string CommonPrefix(string a,string b){
  5. int i=,j=;
  6. string t = "";
  7. while(i<a.size()&&j<b.size()&&a[i]==b[j]){
  8. t+=a[i];
  9. i++;
  10. j++;
  11. }
  12. return t;
  13. }
  14. string longestCommonPrefix(vector<string>& strs) {
  15. //数组长度为0返回空字符串
  16. if(strs.size()==) return "";
  17. //数组长度为1返回第一个字符串
  18. if(strs.size()==) return strs[];
  19. //将第一个字符串作为ans,不断与后面的字符串计算公共前缀然后更新ans,如果ans为空则直接返回ans;
  20. string ans = strs[];
  21. for(int i=;i<strs.size();i++){
  22. ans = CommonPrefix(ans,strs[i]);
  23. if(ans=="") return ans;
  24. }
  25. return ans;
  26. }
  27. };

方法三(分治法)

思路

代码及注释

  1. class Solution {
  2. public:
  3. //返回两个字符串的公共前缀
  4. //也是分治法的合
  5. string merge(string a,string b){
  6. int i=,j=;
  7. string t = "";
  8. while(i<a.size()&&j<b.size()&&a[i]==b[j]){
  9. t+=a[i];
  10. i++;
  11. j++;
  12. }
  13. return t;
  14. }
  15. //分治法的分
  16. string divide(vector<string>& strs,int left,int right){
  17. //当分到最后只有一个字符串时直接返回,因为一个字符串的公共前缀就是他的本身
  18. if(left==right){
  19. return strs[left];
  20. }else{
  21. //将数组一分为二
  22. int mid = (left+right)/;
  23. string leftString = divide(strs,left,mid);
  24. string rightString = divide(strs,mid+,right);
  25. //再通过合并各个分组的公共前缀
  26. return merge(leftString,rightString);
  27. }
  28. }
  29. string longestCommonPrefix(vector<string>& strs) {
  30. //数组长度为0返回空字符串
  31. if(strs.size()==) return "";
  32. //数组长度为1返回第一个字符串
  33. if(strs.size()==) return strs[];
  34.  
  35. //利用分治法计算
  36. return divide(strs,,strs.size()-);
  37. }
  38. };

最长公共前缀 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 约束. 异常处理. MD5. 日志处理

    一.约束 1.抛异常 # # 项目经理写的 class Base: # # 对子类进行了约束. 必须重写该方法 # # 以后上班了. 拿到公司代码之后. 发现了NotImplementedError ...

  2. Jmeter json处理器

  3. hdu 3873 Invade the Mars(有限制的最短路 spfa+容器)

    Invade the Mars Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 365768/165536 K (Java/Others ...

  4. Mybatis/Ibatis,数据库操作的返回值

    该问题,我百度了下,根本没发现什么有价值的文章:还是看源代码(详见最后附录)中的注释,最有效了!insert,返回值是:新插入行的主键(primary key):需要包含<selectKey&g ...

  5. Angular项目目录结构

    前言:不支持MakeDown的博客园调格式的话,真的写到快o(╥﹏╥)o了,所以老夫还是转战到CSDN吧,这边就不更新啦啦啦~ CSDN地址:https://blog.csdn.net/Night20 ...

  6. Spring MVC 解决 Could not write JSON: No serializer found for class java.lang.Object

    Spring MVC 解决 Could not write JSON: No serializer found for class java.lang.Object 资料参考:http://stack ...

  7. get_magic_quotes_gpc() PHP转义的真正含义

    如何正确的理解PHP转 义是一个初学者比较困扰的问题.我们今天为大家简要的讲述了PHP转义的具体含义,希望有所帮助.PHP转义一直困扰着我, 今天认真的看了一下PHP手册, 终于解决了. 在PHP中默 ...

  8. 2、Dapper的使用

    1.表结构介绍: 1)课程表 2)成绩表 3)学生表  2.获取数据库连接的工厂类 需要添加System.Configuration和MySql.Data.MySqlClient引用 namespac ...

  9. H3C ISDN BRI和PRI

  10. 从规则引擎到复杂事件处理(CEP)

    Drools Fusion既是规则引擎,又可以作为CEP.除了事件定义和时间推理之外,对于引擎本身也会有一些不同的使用.主要体现在会话时钟.流模式.滑动窗口和对事件的内存管理. 会话时钟 由于事件的时 ...