【LeetCode】最长公共前缀【二分】
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。说明:
所有输入只包含小写字母 a-z 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-common-prefix
分析:
方法1:找到最短的的字符串,然后拿最短字符串的每个字母去所有字符串中验证(验证该字符在每个字符串中都存在)
时间复杂度:O(S),S为所有字符串中字符数量的总和
最好情况:O(N*minL),N为字符串数量,minl为最短字符串的数量
最坏情况:O(N*M)(N个长度为M的相同字符串)
空间复杂度:O(1)
方法2:找到最短字符串,然后对最短字符串的长度进行二分,每次得到长度mid,就去验证长度mid是否符合要求(验证方法:看看所有字符串的前mid个字符是否相同)
时间复杂度:O(S*log(minl)),S为所有字符串的字符数量,minl为最短字符串的长度
空间复杂度:O(1)
方法1:
class Solution { public: string longestCommonPrefix(vector<string>& v) { int n=v.size(); if(n==0) return ""; if(n==1) return v[0]; int minl=INT_MAX; int index=0; for(int i=0;i<n;i++) { int k=v[i].size(); if(k<minl) { minl=k; index=i; } } string ans; for(int j=0;j<=minl;j++) { for(int i=0;i<n;i++) { if(v[i][j]==v[index][j]) continue; else return ans; } ans+=v[index][j]; } return ans; } };
方法2:
class Solution { public: string longestCommonPrefix(vector<string>& v) { int n=v.size(); if(n==0) return ""; if(n==1) return v[0]; if(n==2&&v[0]==v[1]) return v[0]; int minl=v[0].length(); for(int i=1;i<n;i++) { int k=v[i].size(); if(v[i][0]!=v[i-1][0]) return ""; if(k==0) { return ""; } if(k<minl) { minl=k; } } string ans=v[0].substr(0,1); int start=0; int end=minl; while(start<=end) { int mid=(start+end)/2; string str=v[0]; int flag=1; for(int i=1;i<n;i++) { if(str.substr(0,mid)!=v[i].substr(0,mid)) { flag=0; break; } } if(flag==1) { start=mid+1; ans=str.substr(0,mid); }else { end=mid-1; } } return ans; } };
心之所向,素履以往
分类:
LeetCode
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
2018-08-06 poj 2253 Frogger 最小瓶颈路(变形的最小生成树 prim算法解决(需要很好的理解prim))
2018-08-06 UVALive - 6837 Kruskal+一点性质(暴力枚举)
2018-08-06 uva 10369 Arctic Network (最小生成树加丁点变形)
2018-08-06 UVALive - 2515 (最小生成树 kruskal)
2018-08-06 UVA - 11987 Almost Union-Find(带删除的并查集)
2018-08-06 UVA - 1160(简单建模+并查集)
2018-08-06 POJ 1182 食物链(经典带权并查集 向量思维模式 很重要)