• leetcode_字节跳动_挑战字符串_最长公共前缀


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

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

    示例 1:

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

    示例 2:

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

    说明:

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

     

    发现不知道手感和思路不够了还是什么,做题时总是漏掉一些重要的信息。

    1. ["aa","a"],返回的是最小串a。

    2.[ ] 无字符串数组返回“”。

     

    思路:

    1.遍历每一个字符串获得最小长度minlen,minlen就是最大可能符合的公共子串。

    2.从0到minlen逐个字符串比较,遇到不相同的就直接退出,此时比较到的前n个字符就是最长公共前缀。

    3.算法复杂度 O(minlen*strs.size())。

     

    class Solution {
    public:
        string longestCommonPrefix(vector<string>& strs){
            if(strs.size()==0) return "";
            if(strs.size()==1) return strs[0];
            
            int minlen=strs[0].length();
            for(int i=0;i<strs.size();i++) minlen=minlen<strs[i].length()?minlen:strs[i].length();
            cout<<minlen<<endl;
            int n=0;
            int flag=0;//判断是否相同
            for(int i=0;i<minlen;i++){
                for(int j=1;j<strs.size();j++){
                    if(strs[j][i]!=strs[j-1][i]){
                        flag=1;break;
                    }
                }
                if(flag==1){
                    string res;
                    res=strs[0].substr(0,n);//substr(int pos,int len)
                    return res;
                }
                n++;
            }
            if(flag==0){ 
                return strs[0].substr(0,minlen);//substr(int pos,int len)
            }
            return "";
        }
    };

    重新熟悉了substr函数的操作:

    basic_string substr(size_type _Off = 0,size_type _Count = npos) const;

    substr是C++语言函数,主要功能是复制子字符串,要求从指定位置开始,并具有指定的长度。如果没有指定长度_Count或_Count+_Off超出了源字符串的长度,则子字符串将延续到源字符串的结尾。

    在这题中直接返回子字符串。

     

     

     

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

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

    示例 1:

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

    示例 2:

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

    说明:

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


    C++
     
     
    1
     
    class Solution {
    2
    public:
    3
     
        string longestCommonPrefix(vector<string>& strs){
    4
            if(strs.size()==0) return "";
    5
            if(strs.size()==1) return strs[0];
    6
            
    7
            int minlen=strs[0].length();
    8
            for(int i=0;i<strs.size();i++) minlen=minlen<strs[i].length()?minlen:strs[i].length();
    9
            cout<<minlen<<endl;
    10
            int n=0;
    11
            int flag=0;//判断是否相同
    12
     
            for(int i=0;i<minlen;i++){
    13
     
                for(int j=1;j<strs.size();j++){
    14
     
                    if(strs[j][i]!=strs[j-1][i]){
    15
                        flag=1;break;
    16
                    }
    17
                }
    18
     
                if(flag==1){
    19
                    string res;
    20
                    res=strs[0].substr(0,n);//substr(int pos,int len)
    21
                    return res;
    22
                }
    23
                n++;
    24
            }
    25
     
            if(flag==0){ 
     
     
    26
                return strs[0].substr(0,minlen);//substr(int pos,int len)
    27
            }
    28
            return "";
    29
        }
    30
    };
    最好的开始时间是以前,其次是现在。
  • 相关阅读:
    迁移学习综述
    分析 Kaggle TOP0.1% 如何处理文本数据
    软件工程提问回顾与个人总结
    洛谷 4219/BZOJ 4530 大融合
    洛谷 1486/BZOJ 1503 郁闷的出纳员
    【模板】文艺平衡树
    【模板】树套树(线段树套Splay)
    【模板】可持久化线段树
    【模板】可持久化平衡树
    【模板】左偏树
  • 原文地址:https://www.cnblogs.com/dragonsbug/p/13281071.html
Copyright © 2020-2023  润新知