题目

Write a function to find the longest common prefix string amongst an array of strings.

If there is no common prefix, return an empty string "".

Example 1:

Input: ["flower","flow","flight"]
Output: "fl"

Example 2:

Input: ["dog","racecar","car"]
Output: ""
Explanation: There is no common prefix among the input strings.

Note:

All given inputs are in lowercase letters a-z.

思路一

最朴素的想法,竖直扫描,将所有字符串的第一位进行比较,再将所有字符串的第二位进行比较,直到找到最长的前缀

时间复杂度:若共有m个字符串,每个字符串长n,最差的情况是所有字符串相同,则要比较O(mn);若有字符串不同,则较好情况比较O(m*minLen),minLen是字符串中长度最短的。

class Solution {
public:string longestCommonPrefix(vector<string>& strs) {if(strs.size() == 0)return "";string res="";int min_len = INT_MAX;for(int i = 0; i < strs.size(); i++)min_len= (min_len > strs[i].size()?strs[i].size():min_len);// 拿str[0][i]和 所有的str[j][i] j>1 一位位比较 for(int i = 0; i < min_len; i++){bool flag=true;char x = strs[0][i];// 注意新的写法C++11for(auto& s:strs)  {if(s[i]!=x){flag=false;break;}}if(flag == false)return res;res += x;}return res;}
};

思路二

水平扫描

时间复杂度:最差也是一样,所有字符串都相同,O(mn)

class Solution {
public:string longestCommonPrefix(vector<string>& strs) {if(strs.size()==0)return "";string ans=strs[0];  for(auto& s:strs){if(s.length() == 0)return "";int i=0;for(i = 0; i < ans.length() && i < s.length(); i++){if(s[i]!=ans[i])break;}ans=ans.substr(0,i);}return ans;}
};

思路三

二分查找的思想

先找一个按ACSII排最大的字符串L,把它作为公共前缀。然后找到所有字符串中的最短长度minLen。

思路四

字典树

转载于:https://www.cnblogs.com/shiganquan/p/9381908.html

【Leetcode】14、Longest Common Prefix相关推荐

  1. 【LeetCode】No.5. Longest Palindromic Substring -- Java Version

    题目链接: https://leetcode.com/problems/longest-palindromic-substring/ 1. 题目介绍(最长回文子串) Given a string s, ...

  2. 【LeetCode】1427、字符串的左右移

    [声明] 如果有侵权,请联系作者删除侵权部分. 如果有错误,请联系作者修改错误部分. 如果有转载,请标明出处. [难度] 简单 [题目] 给定一个包含小写英文字母的字符串 s 以及一个矩阵 shift ...

  3. 计算机图形学【GAMES-101】14、动画(物理模拟、质点弹簧系统、粒子系统、运动学、动作捕捉、欧拉方法)

    快速跳转: 1.矩阵变换原理Transform(旋转.位移.缩放.正交投影.透视投影) 2.光栅化(反走样.傅里叶变换.卷积) 3.着色计算(深度缓存.着色模型.着色频率) 4.纹理映射(重心坐标插值 ...

  4. 【LeetCode】21、合并两个有序链表

    21.合并两个有序链表 题目: 将两个升序链表合并为一个新的 升序 链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例1: 输入:l1 = [1,2,4], l2 = [1,3,4] ...

  5. 【Leetcode】组合、排列、子集、切割(回溯模板和去重方法)

    基础版回溯函数参数只有(target, show),target是目标大小,show是递归传递的变量. 一个数字只能用一次,那下次递归时就把这次用去掉 nums[:i]+nums[i+1:] [1,2 ...

  6. 【LeetCode】35、69

    搜索插入位置 ts function searchInsert(nums: number[], target: number): number {for (let i1 = 0; i1 < nu ...

  7. 【LeetCode】62、63

    不同路径 js function uniquePaths(m: number, n: number): number {let arr: number[][] = new Array(m).fill( ...

  8. 【LeetCode】74、75

    搜索二维矩阵 ts function searchMatrix(matrix: number[][], target: number): boolean {let len1 = matrix.leng ...

  9. 【leetcode】解题日记(未完待续)

    开坑,有生之年系列,希望有一天能解出 leetcodeleetcodeleetcode 上的所有题目. 写题解好麻烦,懒得写(手动狗头),进度如下,不定期更新. 总题数 已解答 题解数 2058 23 ...

最新文章

  1. 在SecureCRT下使用sz下载和rz上传文件
  2. 用python画玫瑰花教程-使用Python画一朵玫瑰花
  3. 微信小程序 对request方法二次封装
  4. 使系统生成50个0-9之间的随机数,将每个数字出现的次数 存入一个一维数组中,统计出现次数最多和出现次数最少的数字,及出现次数 和出现频率。...
  5. jdk 1.8 字符串+_JDK 9/10/11:Java字符串上+ =的副作用
  6. linux内核netfilter模块分析之:HOOKs点的注册及调用
  7. c语言程序改错例题,C语言程序改错习题
  8. Java设计模式(二) 观察者模式
  9. mysql 悲观锁 共享锁_MySQL 乐观锁 悲观锁 共享锁 排他锁
  10. 华为Mate50系列不会停更:已敲定设计方案供货时间待定
  11. 微信小程序wx.showToast
  12. 润乾报表 - 细节问题
  13. 趣味记忆5大经典的软件架构风格
  14. python下faker模块引入报错:Traceback (most recent call last) 解决办法
  15. IEEE Access投稿流程经验分享
  16. 三菱FX5U系列PLC中的DSZR机械原点回归指令(带DOG搜索)的详细分析
  17. PhalApi+Gearman,接口MQ异步队列任务的完整开发教程
  18. 文博界最早利用计算机技术的,现代计算机技术博物馆中的应用
  19. ui设计要素;ui设计要素有哪些
  20. 知识图谱构建中的抽取方法

热门文章

  1. 调用Remoting的两种激活方式和以及因此而产生的三种.net Remoting对象
  2. C#4.0和VS2010新特性(三)
  3. 不用代理实现弹出进度条窗体
  4. VR是一场“大骗局”, 另一种声音
  5. Caffe + Ubuntu 14.04 64bit + CUDA 6.5 配置说明
  6. MYSQL使用inner join 进行 查询/删除/修改示例
  7. hibernate----N-1(一)
  8. Android App截包工具
  9. 刚才我提出要把数据库处理部分放到代码里,但是有人提出,存储过程有缓存,速度快。我该怎么说啊?...
  10. java之java.sql.SQLException: ResultSet is from UPDATE. No Data.