最长公共前缀 leetcode 14
方法一(纵向扫描)
解题思路
先计算出数组中最小的字符串长度,这样就避免了越界的情况,思路更加明确,但同时时间复杂度就相应的上升了。
先计算所有字符串在同一列上的字符是否相同,然后依次向后延伸。
代码及注释
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的更多相关文章
- LeetCode:最长公共前缀【14】
LeetCode:最长公共前缀[14] 题目描述 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flo ...
- 14. 最长公共前缀----LeetCode
编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower","flow" ...
- 【Leetcode】【简单】【14最长公共前缀】【JavaScript】
题目 14. 最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower",& ...
- LeetCode 14. 最长公共前缀(Longest Common Prefix)
14. 最长公共前缀 14. Longest Common Prefix 题目描述 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". Lee ...
- Java实现 LeetCode 14 最长公共前缀
14. 最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower",&quo ...
- LeetCode 14 Longest Common Prefix(最长公共前缀)
题目链接:https://leetcode.com/problems/longest-common-prefix/?tab=Description Problem: 找出给定的string数组中最 ...
- # Leetcode 14:Longest Common Prefix 最长公共前缀
公众号:爱写bug Write a function to find the longest common prefix string amongst an array of strings. If ...
- python刷LeetCode:14. 最长公共前缀
难度等级:简单 题目描述: 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower",& ...
- 【LeetCode】14. Longest Common Prefix 最长公共前缀
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 个人公众号:负雪明烛 本文关键词:prefix, 公共前缀,题解,leetcode, 力扣 ...
随机推荐
- Codeforces Round #323 (Div. 2) Once Again... CodeForces - 582B 最长非下降子序列【dp】(不明白)
B. Once Again... time limit per test 1 second memory limit per test 256 megabytes input standard inp ...
- OpenKruise - 云原生应用自动化引擎正式开源
2019 年 6 月 24 日至 26 日, 由 Cloud Native Computing Foundation (CNCF) 主办的云原生技术大会 KubeCon + CloudNativeCo ...
- 归并排序及应用 (nyoj 117 求逆序数)
求逆序数 时间限制:2000 ms | 内存限制:65535 KB 难度:5 描述 在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序.一个排列中 ...
- Card Hand Sorting 二进制枚举暴力
这个题其实由于只有4种花色的,那么每种花色排列的顺序,也不过是4!种,然后对于每种花色内部到底是升序还是降序,其实也可以直接暴力,一共也就4!*2^4种情况,然后直接进行排序就可以了,但是我们如何计算 ...
- 从遇见到信任 | Apache Dubbo 的毕业之旅
所谓信任,就是多一次机会. 2018年2月16日,Apache Dubbo 加入 Apache 基金会孵化器. ... 2019年5月16日,Apache 软件基金会董事会决议通过了 Apache D ...
- AUTOSSH设置ssh隧道,实现反向代理访问内网主机
内网主机上配置: autossh -M -CNR :localhost: ubuntu@123.207.121.121 可以实现将访问主机123.207.121.121的1234端口的数据,通过隧道转 ...
- Python--day66--模板语言之自定义mysimpletag
- poj 1920 Towers of Hanoi
Towers of Hanoi Time Limit: 3000MS Memory Limit: 16000K Total Submissions: 2213 Accepted: 986 Ca ...
- Java语法格式
任何一种语言都有自己的语法规则,Java也一样,既然是规则,那么知道其如何使用就可以了. 代码都定义在类中,类由class来定义,区分 public class 和 class; 代码严格区分大小 ...
- Vue进阶
组件深入 过渡&动画 可复用性&组合 工具&规模化&内在 ****************参考*************** vue官方教程