14. Longest Common Prefix[E]最长公共前缀
题目
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 "".
Example1:
Input:["flower","flow","flight"]
Output:"fl"
Example2:
Input:["dog","racecar","car"]
Output:""
Explanation: There is no common prefix among the input strings.
思路
思路一:暴力搜索
本题思路很简单,需要找到最长公共前缀,那么就需要有一个字符串作为基准,在其他字符串中寻找公共字符串。我们以第一个字符串为基准在其他字符串中寻找。寻找的终止条件:
- 当前遍历的长度超过字符串长度
- 基准字符串的第i个字符与当前字符串第i个字符不匹配。
思路二:优化搜索
寻找题目的隐含条件。 需要找的是公共字符串,那么以长度字符串为基准一定能加快程序的速度。此外,我们考虑将字符串数组排序。字符串的排序是按照字母来的,这样做的好处是将公共字符比较多的字符串集中起来,而公共字符比较少的将被放在数组(vector)的两端。例如例1的输入数组["flower","flow","flight"],排序后为:["flight", "flow", "flower"]。我们将第一个与最后一个字符串对比,搜寻公共子串。为了防止溢出,以第一个与最后一个长度较短的为基准查找。
Tips
Vector(STL)
主要是vector容器的begin()、end()和front()、back()函数。
(1)begin()
返回当前vector容器中起始元素的迭代器。
//定义一个int容器的迭代器
vector<int>::iterator iter;
//声明并初始化一个int类型的容器
vector<int> vec={1, 2, 3, 4, 5};
iter = vec.begin();
//返回迭代器表示的元素内容
cout << *iter << endl; //结果为1
(2)end()
返回当前vector容器中末尾元素的迭代器。注意end()返回的是最后一位的下一位。
//定义一个int容器的迭代器
vector<int>::iterator iter;
//声明并初始化一个int类型的容器
vector<int> vec={1, 2, 3, 4, 5};
iter = vec.end() - 1; //end()指向最后一位的下一位
//返回迭代器表示的元素内容
cout << *iter << endl; //结果为5
(3)front()
返回当前vector容器中起始元素的引用。
//声明并初始化一个int类型的容器
vector<int> vec={1, 2, 3, 4, 5};
//返回迭代器表示的元素内容
cout << vec.front() << endl; //结果为1
(4)back()
返回当前vector容器中末尾元素的引用。
//声明并初始化一个int类型的容器
vector<int> vec={1, 2, 3, 4, 5};
//返回迭代器表示的元素内容
cout << vec.back() << endl; //结果为5
List(python)
python的列表(List)是序列类型,因此与字符串有一些共同特点,列表与字符串的不同主要在于
- 列表可以包含其他元素,而不仅包含字符。列表可以包含任何类型的元素序列,甚至可以包含不同类型元素混合的序列。
- 列表是可变类型。
(1)创建python列表
List1 = [1, 2, 3, 4, 5]
List2 = ['a', 'b', 'c', 'd', 'e']
List3 = [1, 2, 'a', 'b']
(2)函数
对于一个列表A
- len(A):返回列表A的长度,即元素个数。
- min(A):返回列表A中的最小元素。如果A是列表的列表,则只考虑每个列表的第一个元素。
- max(A):返回列表A中的最大元素。如果A是列表的列表,则只考虑每个列表的第一个元素。
- sum(A):返回列表A所有元素的和,A中元素必须是数字。
C++
- 思路1
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
string s = "";
if(strs.size() == 0)
return "";
for(int i = 0; i < strs[0].length();i++) //以第一个元素为基准
{
char c = strs[0].at(i);
for(int j = 1;j < strs.size();j++)
{
if(i >= strs[j].length() || strs[j].at(i) != c)
return s;
}
s += c;
}
return s;
}
};
- 思路2
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if (strs.empty())
return "";
sort(strs.begin(), strs.end());
int i = 0;
int len = min(strs[0].size(), strs.back().size());
while (i < len && strs[0][i] == strs.back()[i])
i ++;
return strs[0].substr(0, i);
}
};
Python
- 思路2
class Solution(object):
def longestCommonPrefix(self, strs):
"""
:type strs: List[str]
:rtype: str
"""
if not strs:
return ""
if len(strs)==1:
return strs[0]
minStr = min(strs)
maxStr = max(strs)
result = ""
for i in range(len(minStr)):
if minStr[i] != maxStr[i]:
return minStr[:i]
return minStr
总结
写代码充分运用
- 公共(以长度最短字符串作为基准)
- 前缀(利用子字符串方法)
这两个关键字。
参考
[1] https://www.cnblogs.com/grandyang/p/4606926.html
14. Longest Common Prefix[E]最长公共前缀的更多相关文章
- LeetCode 14 Longest Common Prefix(最长公共前缀)
题目链接:https://leetcode.com/problems/longest-common-prefix/?tab=Description Problem: 找出给定的string数组中最 ...
- LeetCode OJ:Longest Common Prefix(最长公共前缀)
Write a function to find the longest common prefix string amongst an array of strings. 求很多string的公共前 ...
- 14. Longest Common Prefix【leetcode】
14. Longest Common Prefix Write a function to find the longest common prefix string amongst an array ...
- [LeetCode][Python]14: Longest Common Prefix
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com'https://oj.leetcode.com/problems/longest ...
- Leetcode 14. Longest Common Prefix(水)
14. Longest Common Prefix Easy Write a function to find the longest common prefix string amongst an ...
- leetCode练题——14. Longest Common Prefix
1.题目 14. Longest Common Prefix Write a function to find the longest common prefix string amongst a ...
- [LeetCode]14. Longest Common Prefix最长公共前缀
Write a function to find the longest common prefix string amongst an array of strings. If there is n ...
- Leetcode No.14 Longest Common Prefix最长公共前缀(c++实现)
1. 题目 1.1 英文题目 Write a function to find the longest common prefix string amongst an array of strings ...
- 【LeetCode】14. Longest Common Prefix 最长公共前缀
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 个人公众号:负雪明烛 本文关键词:prefix, 公共前缀,题解,leetcode, 力扣 ...
随机推荐
- ES6变量的解构赋值
变量的解构赋值 1.数组的解构赋值 2.对象的解构赋值 3.字符串的解构赋值 4.数值和布尔值的解构赋值 5.函数参数的解构赋值 6.圆括号问题 7.用途 1.数组的解构赋值 ES6 允许写成下面这样 ...
- P1284 三角形牧场
题目描述 和所有人一样,奶牛喜欢变化.它们正在设想新造型的牧场.奶牛建筑师Hei想建造围有漂亮白色栅栏的三角形牧场.她拥有N(3≤N≤40)块木板,每块的长度Li(1≤Li≤40)都是整数,她想用所有 ...
- Android Drawable之getIntrinsicWidth()和getIntrinsicHeight()
在Android的开发中,凡是需要画图的地方大都离不开类Drawable.Android的官方文档中介绍这个类就是被设计用来表示可以被画的东西.A Drawable is a ge ...
- VS2012编译PCL1.70的过程
以防博主删除文档,重新copy一遍... 关于个人的几个注意事项: 对于boost,可以使用vc100的库,来编译VC110的代码: 对于确实的包含,一个一个添加,要耐心等待!!! 原文链接:http ...
- 【seo】title / robots / description / canonical
1.title title,就是浏览器上显示的那些内容,不仅用户能看到,也能被搜索引擎检索到(搜索引擎在抓取网页时,最先读取的就是网页标题,所以title是否正确设置极其重要. 1)title一般不超 ...
- jQuery添加新的元素
append() - 在被选元素的结尾插入内容 prepend() - 在被选元素的开头插入内容 after() - 在被选元素之后插入内容 before() - 在被选元素之前插入内容 $(&quo ...
- System.Windows.Forms.WebBrowser中 处理 js 脚本 window.Open 禁止新建窗口 的方法
wb 是 拖放在窗体上的 System.Windows.Forms.WebBrowser 在你的窗体代码中定义 SHDocVw.WebBrowser_V1 wb1; 在 你窗体的 load 事件中 加 ...
- 【udacity】机器学习-回归
Evernote Export 1.什么是回归? regression 在监督学习中,包括了输入和输出的样本,在此基础上,我们能够通过新的输入来表示结果,映射到输出 输出包含了离散输出和连续输出 2. ...
- 【2018集训队互测】【XSY3372】取石子
题目来源:2018集训队互测 Round17 T2 题意: 题解: 显然我是不可能想出来的……但是觉得这题题解太神了就来搬(chao)一下……Orzpyz! 显然不会无解…… 为了方便计算石子个数,在 ...
- nyoj254-编号统计
编号统计 时间限制:2000 ms | 内存限制:65535 KB 难度:2 描述 zyc最近比较无聊,于是他想去做一次无聊的统计一下.他把全校同学的地址都统计了一下(zyc都将地址转化成了编码) ...