6.leetcode题目14: Longest Common Prefix
2016-03-03 22:27
246 查看
最开始没搞懂什么叫最长公共前缀,后来明白就是最长的相同字符数
我最开始自己做的:
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if(strs.empty())
return "";
string ref=strs[0];
for(int i=1;i<strs.size();i++){
string temp=ref;
ref="";
for(int j=0;j<strs[i].size();j++){
if(temp[j]==strs[i][j]){
ref+=temp[j];
}
else{
break;
}
}
}
return ref;
}
};
一个一个比较,最后运行时间8ms,我看到还有4ms的,所以又修改了一下(参考了别人的,但真没想到有这么大作用):
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if(strs.empty())
return "";
int minlen=strs[0].size();
for(int i=0;i<strs.size();i++){
minlen=minlen<strs[i].size()?minlen:strs[i].size();
}
string ref=strs[0];
for(int i=1;i<strs.size();i++){
string temp=ref;
ref="";
for(int j=0;j<minlen;j++){
if(temp[j]==strs[i][j]){
ref+=temp[j];
}
else{
break;
}
}
}
return ref;
}
};
运行时间为4ms,修改后的版本为:先找出所有字符串中最短的字符串的长度minlen,然后求公共前缀的时候只比较前minlen个字符,减少了循环次数,从而减少了运行时间。
我觉得这是一个很有用的经验:循环很耗时,尽量减少循环。
还有就是,我自己思考的时候考虑到了空字符串的情况,但是在写的时候竟然忘记了,这一点不能被原谅,一定要注意这些特殊测试项,谨记。
我最开始自己做的:
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if(strs.empty())
return "";
string ref=strs[0];
for(int i=1;i<strs.size();i++){
string temp=ref;
ref="";
for(int j=0;j<strs[i].size();j++){
if(temp[j]==strs[i][j]){
ref+=temp[j];
}
else{
break;
}
}
}
return ref;
}
};
一个一个比较,最后运行时间8ms,我看到还有4ms的,所以又修改了一下(参考了别人的,但真没想到有这么大作用):
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if(strs.empty())
return "";
int minlen=strs[0].size();
for(int i=0;i<strs.size();i++){
minlen=minlen<strs[i].size()?minlen:strs[i].size();
}
string ref=strs[0];
for(int i=1;i<strs.size();i++){
string temp=ref;
ref="";
for(int j=0;j<minlen;j++){
if(temp[j]==strs[i][j]){
ref+=temp[j];
}
else{
break;
}
}
}
return ref;
}
};
运行时间为4ms,修改后的版本为:先找出所有字符串中最短的字符串的长度minlen,然后求公共前缀的时候只比较前minlen个字符,减少了循环次数,从而减少了运行时间。
我觉得这是一个很有用的经验:循环很耗时,尽量减少循环。
还有就是,我自己思考的时候考虑到了空字符串的情况,但是在写的时候竟然忘记了,这一点不能被原谅,一定要注意这些特殊测试项,谨记。
相关文章推荐
- 中序遍历二叉树及求树高
- dataguard 日志的应用
- java调用kettle向job(任务)和transformation(转换)传递参数实例
- 使用Bmob云端服务器模拟简单的注册登录
- C语言结构体赋值2
- 结构体赋值
- Linux系统学习笔记:文件I/O
- 足球预测算法分析之埃罗预测
- 【07】Spinner使用SimpleAdapter
- dataguard相关进程(RFS,LNSn,MRP,LSP)和参数配置
- Directx11学习笔记【六】 基本的数学知识----矩阵篇
- 结构体所占内存大小
- 聚集索引与主键
- SSH Warning: the RSA host key for differs from the key for the IP address
- 【陆勤阅读】参加kaggle数据挖掘竞赛是怎样一种体验?
- docker 安装以及 使用
- Java中使用Lua脚本语言(转)
- 开发必看 | iOS开发常用设计模式!
- Linux下查看操作系统信息、内存情况及cpu信息:cpu个数、核心数、线程数
- 蓝桥杯 2011年省赛(1-10题)