0
点赞
收藏
分享

微信扫一扫

【leetcode】-- 14.最长公共前缀(C++纵向实现)

言诗把酒 2022-04-21 阅读 60

leetcode – 14.最长公共前缀


原题地址:https://leetcode-cn.com/problems/longest-common-prefix/submissions/

题目:

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

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

示例 1:

输入:strs = [“flower”,“flow”,“flight”]
输出:“fl”
示例 2:

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

提示:

1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i] 仅由小写英文字母组成

C++纵向解法:

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        if(!strs.size()) return " ";		//当strs的长度为0时,返回空“ ”

        int wordlen = strs[0].size();		//定义一个wordlen来存储strs第一个字符串的长度
        int wordcnt = strs.size();	//定义一个wordcnt来存储strs的长度
        for(int i = 0; i < wordlen;i++){		
            char a = strs[0][i];		//定义一个a来存储第一个单词的第i个字符
            for(int j = 1;j < wordcnt; j++){		//定义一个j来遍历整个strs的长度
                if(strs[j][i] != a){		//判断相同的字符位置,每个字符串是否与a相同,不相同则进入 入
                    return strs[0].substr(0 , i);	//最后返回与第一个字符串相同的字符
                }
            }
        }
        return strs[0];		//返回第一个字符串
    }
};

请添加图片描述

思路:

这题主要考察的是 对于字符数组中字符搜索的能力。这里我使用了纵向对比的方法(绝对不是其他的方法太麻烦或者不理解(doge))。

首先,当这个strs为空时,直接返回空字符串;我们需要对比的是每一个字符串的相同位置的字符,所以简单的使用两个循环就可以做到。

我们定义一个wordlen来存储第一个字符串的长度,定义一个wordcnt来存储总的字符数组的长度(不着急,我们后面会讲为什么这样定义)。

我们先做第一个循环,定义一个i,这个i从0开始计数,然后限定的范围是第一个字符串的长度(这样定义是因为后面的字符长度不能再超过第一个字符串的长度了,而且没有意义),然后我们定义一个a来存储我们第一个字符串中的第i个字符;然后我们进入第二个循环,我们在第二个循环中定义了一个j,j从1开始,限定范围是strs的长度,然后递增,如果strs第 j 个字符串的第 i 个字符不等于a(strs[0] [i])或者 strs第 j 个位置的字符串的长度等于 i 时 (其实这部分并不是必要条件,只是为了能确定这个字符是否到达了最小位,可以直接提前结束),我们进入判断然后返回strs[0] 中一直到 i 位置的字符。

举报

相关推荐

0 条评论