zoukankan      html  css  js  c++  java
  • LeetCode

    LeetCode - Longest Common Prefix

    2013.12.1 23:23

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

    Solution:

      For two string s1 and s2, compare the elements from the beginning, when the end or the first mismatch is found, the common prefix is found.

      For n strings s[n], perform (n - 1) times such comparings. If the current common prefix is already empty "", then the latter comparison is meaningless and cancelled.

      Time complexity is O(n * max(strlen(s[i]))), that means the comparison can be performed at most (n - 1) times, and no single comparison will go longer than the longest string amongst s[n]. Space complexity is O(1).

      Actually, if we find out the shortest string s_min amongst s[n], and start the first comparison from the shortest string. We'll gain a time complexity of O(n * min(strlen(s[i]))). Space complexity remains O(1).

      Here is an example to show why order of the data matters:

        ['aaa', ''aaa', 'aaa', 'd']

        ['d', 'aaa', 'aaa', 'aaa']

        The time needed for the two dataset above would be different, since order is different. It's better to put short ones on the front.

    Accepted code:

     1 // 1RE, 1AC
     2 #include <algorithm>
     3 using namespace std;
     4 
     5 class Solution {
     6 public:
     7     string longestCommonPrefix(vector<string> &strs) {
     8         // IMPORTANT: Please reset any member data you declared, as
     9         // the same Solution instance will be reused for each test case.
    10         int n = strs.size();
    11         // 1RE here, didn't consider the case when $strs is empty.
    12         if(n <= 0){
    13             return "";
    14         }
    15         string res = strs[0];
    16         
    17         int i;
    18         for(i = 1; i < n; ++i){
    19             res = commonPrefix(res, strs[i]);
    20             if(res == ""){
    21                 break;
    22             }
    23         }
    24         
    25         return res;
    26     }
    27 private:
    28     string commonPrefix(string s1, string s2) {
    29         if(s1.length() > s2.length()){
    30             return commonPrefix(s2, s1);
    31         }
    32         
    33         int len1, len2;
    34         
    35         len1 = s1.length();
    36         len2 = s2.length();
    37         int i;
    38         for(i = 0; i < len1; ++i){
    39             if(s1[i] != s2[i]){
    40                 break;
    41             }
    42         }
    43         
    44         return s1.substr(0, i);
    45     }
    46 };

     

  • 相关阅读:
    postgreSQL官网对json的一些说明
    postgreSQL_jsonb中某一个键值对的修改操作
    redis基础
    failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED
    012、时间、日期控件
    011、AutoCompleteTextView控件,具有自动提示功能的菜单
    010、Spinner使用
    009、使用ViewFlipper实现左右滑动事件
    008、不同程序的彼此调用
    007、判断手机操作系统是否允许运行程序
  • 原文地址:https://www.cnblogs.com/zhuli19901106/p/3453198.html
Copyright © 2011-2022 走看看