14. Longest Common Prefix
2015-06-29 19:12
162 查看
这道题目比较常规和简单,我的算法是先计算出字符串数组中最短的那个字符串的长度maxCommLen,然后从后往前扫,变量cnt+1记录目前探测到的最长字符串的长度,如果遇到了一个非共同字符,则更新变量cnt。后来想了一下,这样写代码比较复杂,需要维护cnt这个变量,而且遍历次数会变多。参考了一下别人的代码,其实从前向后扫,更直观,效率也更好。无论是从后向前还是从前向后,时间复杂度都是O(N*M),其实N为字符串数组中字符串的数量,M为字符串数组中最短的那个字符串的长度。
从后向前扫的代码如下:
从前往后扫更直观和简便,代码如下:
从后向前扫的代码如下:
string longestCommonPrefix(vector<string>& strs) { if (strs.size() == 0) { return ""; } int i, j, len = (int)strs.size(), maxCommLen = INT32_MAX, cnt = 0; bool ifEqual = true; for (i=0; i<len; i++) { if (maxCommLen > strs.at(i).size()) { maxCommLen = (int)strs.at(i).size(); } } cnt = maxCommLen-1; // cnt记录最长公共前缀的最后一个字符的下标 for (i=maxCommLen-1; i>=0; i--) { if (!ifEqual) { // 如果遇到非公共字符,则更新cnt cnt = i; ifEqual = true; } char tmp = strs.at(0).at(i); for (j=1; j<len; j++) { if (strs.at(j).at(i) != tmp) { break; } } if (j != len) { ifEqual = false; // 遇到了非公共字符,将ifEqual赋值为false } } if (ifEqual) { return strs.at(0).substr(0, cnt+1); } else { return ""; } }
从前往后扫更直观和简便,代码如下:
class Solution { public: string longestCommonPrefix(vector<string>& strs) { if (strs.size() == 0) { return ""; } int i, j, len = (int)strs.size(), maxCommLen = INT32_MAX, prefixLen = 0; string result; char c; for (i=0; i<len; i++) { if (maxCommLen > strs.at(i).size()) { maxCommLen = (int)strs.at(i).size(); } } for (i=0; i<maxCommLen; i++) { for (j=0; j<len; j++) { if (j == 0) { c = strs.at(j).at(i); continue; } if (c != strs.at(j).at(i)) { return strs.at(j).substr(0, i); // 碰到一个非公共字符串可以立即返回 } } prefixLen++; // 记录公共前缀长度 } return strs.at(0).substr(0, prefixLen); } };
相关文章推荐
- selenium依次点击页面的删除按钮
- vMWare - Introduction to the Software-Defined Data Center
- Android实时监听网络状态
- samba配置
- GDAL的安装和配置(编译proj.4)
- Exchange Server 2010续定证书系列5-将续定后证书导入其它服务器
- 位运算中你不知道的高深之处!
- LeetCode_Convert Sorted List to Binary Search Tree
- hdu2126 Buy the souvenirs
- html5桌面通知,notification的使用,右下角出现通知框
- 采花生
- ios开发网络知识 TCP,IP,HTTP,SOCKET区别和联系
- C++隐式类型转换
- 黑马程序员-OC语言-NSString 类介绍及用法(听课笔记)
- Catch That Cow
- tomcat6.0 配置不同端口访问不同项目
- 从setTimeout谈JavaScript运行机制
- Catch That Cow 分类: POJ 2015-06-29 19:06 10人阅读 评论(0) 收藏
- 作业8.17
- SQL_符号分割字符串的使用提取(针对任意长度)