• LeetCode14:最长公共前缀


    编写一个函数来查找字符串数组中的最长公共前缀。

    如果不存在公共前缀,返回空字符串 ""。

    示例 1:

    输入: ["flower","flow","flight"]
    输出: "fl"
    示例 2:

    输入: ["dog","racecar","car"]
    输出: ""
    解释: 输入不存在公共前缀。
    说明:

    所有输入只包含小写字母 a-z 。

    纵向扫描

    按顺序对比每个字符串的每一个字符,遇到不同的就返回已经匹配的内容,否则就返回第一个字符串的全部内容。

     1 class Solution {
     2 public:
     3     string longestCommonPrefix(vector<string>& strs) {
     4         cout<<"in coming"<<endl;
     5         int n=strs.size(),min=9999;
     6         if(n==0) return "";
     7         cout<<n<<endl;
     8         vector<int> s(n);
     9         for(int i=0;i<n;i++)
    10             if(strs[i].size()<min) min=strs[i].size();
    11         cout<<min<<endl;
    12         int i=0,len=0;
    13         char cur;
    14         while(i<min){
    15             cur=strs[0][i];
    16             cout<<cur<<endl;
    17             for(int j=1;j<n;j++){
    18                 if(strs[j][i]!=cur){
    19                     return strs[0].substr(0,len);
    20                 }
    21             }
    22             len++;
    23             cout<<len<<endl;
    24             i++;
    25         }
    26       
    27     
    28     cout<<"before return";
    29     return strs[0].substr(0,len);}
    30 };

    时间复杂度为O(mn),m为字符串的平均长度,n为字符串数量。空间复杂度O(1)。

    排序后对比头尾

    直接对字符串进行排序,然后比较第一个和最后一个,直接返回匹配的内容。

     1 class Solution {
     2 public:
     3     string longestCommonPrefix(vector<string>& strs) {
     4         if(strs.empty()) return "";
     5         const auto p = minmax_element(strs.begin(), strs.end());
     6         for(int i = 0; i < p.first->size(); ++i)
     7             if(p.first->at(i) != p.second->at(i)) return p.first->substr(0, i);
     8         return *p.first;
     9     }
    10 };
    11 
    12 作者:you-yuan-de-cang-qiong
    13 链接:https://leetcode-cn.com/problems/longest-common-prefix/solution/zi-dian-xu-zui-da-he-zui-xiao-zi-fu-chuan-de-gong-/
    14 来源:力扣(LeetCode)
    15 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    这些例子很炫,感兴趣的童鞋可以了解一下
    Java经典习题24
    Java经典习题23
    Java经典练习题22
    Java经典习题21
    Java经典习题20
    Java经典练习题19
    Java经典练习题18
    Java经典习题17
    Java经典习题16
  • 原文地址:https://www.cnblogs.com/rookiez/p/13191330.html
Copyright © 2020-2023  润新知