LeetCode刷题:14.最长公共前缀:纵向横向扫描

前言

  • 文章作为日记或心得,记录学习过程
  • 本文记录本题(源自LeetCode)遇到的所有问题、疑惑
  • 如对内容有任何建议或看法,欢迎评论区学习交流

正文

题目

在这里插入图片描述
有两种想法,一种是比较每个字符串中的第一个字符,若相同,则比较第二个,若不同,则返回
第二种是,每次比较两个字符串,取其最长公共前缀,再用新的字符串和下一个比较。
后来根据官方答案得知,第一种方法叫纵向扫描,第二种叫横向扫描

解答:纵向扫描

官方答案扒的图,它自己有力扣的水印,后面就不再说明了
在这里插入图片描述

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        int count = strs.size();
        string common = "";
        for (size_t i = 0; i < strs[0].size(); i++)
        {
            for (size_t j = 1; j < count; j++)
            {
                //对于每个字符串的第i个字符,判断全相同转为如果不相同就结束
                if (strs[0][i]!=strs[j][i])
                    return strs[0].substr(0, i);
            }
        }
        return common;
    }
};

在这里插入图片描述
也就是没有考虑空strs的情况,补上判断条件后
在这里插入图片描述
补上判断是否只有一个字符串后
在这里插入图片描述

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        int count = strs.size();
        string common = "";
        if (count == 0)
            return common;
        if (count == 1)
            return strs[0];
        for (size_t i = 0; i < strs[0].size(); i++)
        {
            for (size_t j = 1; j < count; j++)
            {
                //对于每个字符串的第i个字符,判断全相同转为如果不相同就结束
                if (strs[0][i] != strs[j][i])
                    return strs[0].substr(0, i);
            }
            //如果能出上面循环,则说明strs[0][i]为公共字符
            common = common + strs[0][i];
        }
        return common;
    }
};

结果

在这里插入图片描述

解答:横向扫描

在这里插入图片描述

class Solution {
public:
    //先写个函数,可以取两字符串的公共
    string lcp(string str1, string str2)
    {
        string common = "";
        for (size_t i = 0; i < str1.size(); i++)
        {
            if (str1[i] == str2[i])
                common = common + str1[i];
        }
        return common;
    };
    string longestCommonPrefix(vector<string>& strs) {
        int count = strs.size();
        if (count == 0)
            return "";
        if (count == 1)
            return strs[0];
        string temp = lcp(strs[0], strs[1]);
        for (size_t i = 2; i < strs.size(); i++)
            temp = lcp(temp, strs[i]);
        return temp;
    }
};

在这里插入图片描述
应该是lcp写错了,取的是最后的a

结果

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/wwz1751879/article/details/107854160