LeetCode 0014
来源:互联网 发布:好用的网络电话软件 编辑:程序博客网 时间:2024/09/21 06:34
原题链接
这题要求的是,所有字符串的公共前缀,并且这个公共前缀是最长的,比如”abc”和”ab”,”a”是这两个字符串的公共前缀,”ab”也是,但是由于”ab”更长,因此返回是”ab”。
我的思路:
直接暴力求解就好了,其中再加一点优化
class Solution {public: string longestCommonPrefix(vector<string>& strs) { int size = strs.size(); if(size == 0) { return ""; } string cmp_str = strs[0]; int len = cmp_str.size(); int j = len; for(int i = 1; i < size; i++) { len = len < strs[i].size() ? len : strs[i].size(); for(j = 0; j < len; j++) { if(cmp_str[j] != strs[i][j]) { break; } } len = j; } return cmp_str.substr(0, j); }};
速度最快的解法:
class Solution {public: string longestCommonPrefix(vector<string>& strs) { int size = strs.size(), j = 0; string result; if (strs.empty()) return result; while (1) { for (int i = 1; i < size; i++) { if (j >= strs[i].length() || strs[i][j] != strs[0][j]) { return result; } } result += strs[0][j]; j++; if (j >= strs[0].length()) return result; } return result; }};
这种做法的思路是,把长度从1开始试,如果前面的长度都能使得所有的字符串取相同的前缀,而这个长度不行,那么答案就出来了,而我的做法是,把第一个与剩余所有的字符串进行比较,再利用已有的结论——最长公共前缀的长度一定小于等于当前的最长公共前缀的长度,也一定小于等于某个字符串的长度——进行一些优化,如果不优化的话会更糟糕。
我来构造这么一个例子
for(int i = 0; i < n; i++) { string str = ""; for(int j = 0; j < n - i; j++) { str += "a"; } strs.add(str);}
用我的做法应该是
而最佳答案的做法约为
阅读全文
0 0
- LeetCode 0014
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode
- leetcode:
- leetcode:
- LeetCode
- leetcode
- LEETCODE
- leetcode
- leetCode
- leetcode
- [leetcode]
- LeetCode
- leetcode
- leetcode:
- 单词查找树(c++ 版)
- MT 190 Advice of Charges, Interest and Other Adjustments收费、利息和其他调整
- 实现栈和队列的不同方法
- 5.五环加权有向图-最短路径问题
- 理论篇~第二章 数据仓库的命名规范
- LeetCode 0014
- Linux查看系统配置常用命令整理
- phpcms v9 如何实现广告显示
- 数据结构小知识点
- 高级软件工程实验报告二
- 大盗阿福
- log4j属性文件的配置内容
- 简单安装
- for in 和 for of 的区别