LeetCode14 Longest Common Prefix

题意:

Write a function to find the longest common prefix string amongst an array of strings. (Easy)

这两天实验室项目太忙了, 老板各种活,只能挑着先水几道easy题,这两个题是昨天做的没来得及写总结。

分析:

暴力的想法遍历比较一下就行,注意遍历的始末位置。优化的话改天再看看discuss

代码:

 1 class Solution {
 2 public:
 3     string longestCommonPrefix(vector<string>& strs) {
 4         string result;
 5         if (strs.size() == 0) {
 6             return result;
 7         }
 8         int minLength = 0x7FFFFFFF;
 9         for (int i = 0; i < strs.size(); ++i) {
10             int si = strs[i].size();
11             minLength = min(minLength, si);
12         }
13 
14         for (int i = 0; i < minLength; ++i) {
15             int flag = 0;
16             for (int j = 0; j < strs.size() - 1; ++j) {
17                 if (strs[j][i] != strs[j + 1][i]) {
18                     flag = 1;
19                     break;
20                 }
21             }
22             if (flag == 0) {
23                 result += strs[0][i];
24             }
25             if (flag == 1) {
26                 break;
27             }
28         }
29         return result;
30     }
31 };

 

8.6更新:

上面的还是不删除了,算法上这个简单题应该没啥优化的了,无非是另一种方法拿第一个字符串以此与后续求公共前缀;

但是!当初这个代码写的真是太长太丑了...有一些可以优化代码的地方,比如

1.  flag其实没用,不满足情况就直接返回结果就行了;

2.  不要多走一遍求最小来作为遍历范围了,中间加一个判断语句就行;

3.  不用sting的+=,改用一个length最后再substr感觉效率上会高一点;(在leetcode跑的并没变化...)

更新后代码:

 1 class Solution {
 2 public:
 3     string longestCommonPrefix(vector<string>& strs) {
 4         int length = 0;
 5         if (strs.size() == 0) {
 6             return "";
 7         }
 8         for (int i = 0; i < strs[0].size(); ++i) {
 9             for (int j = 0; j < strs.size() - 1; ++j) {
10                 if (strs[j].size() == i|| strs[j][i] != strs[j + 1][i]) {
11                     return strs[0].substr(0,length);
12                 }
13             }
14             length++;
15         }
16         return strs[0].substr(0,length);
17     }
18 };

 

posted @ 2016-08-05 22:14  wangxiaobao1114  阅读(170)  评论(0编辑  收藏  举报