算法题每日一练---第69天:最长公共前缀

1,370 阅读1分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第3天,点击查看活动详情

一、问题描述

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

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

题目链接:最长公共前缀

二、题目要求

样例 1

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

样例 2

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

考察

1.字符串、前缀求值
2.建议用时15~35min

三、问题分析

这一题其实不算难,最长的公共前缀,以样例 1为例,我们就选第一个字符串flower作为基底。

首先,下面左侧代表基底的前缀,左侧代表其他的字符串是否包含这个前缀 1包含 0不包含最左侧代表截止到目前最长的公共前缀。

f                      1                    1               1
fl                     1                    1               2
flo                    1                    0               2
flow
flower

当出现0的时候就不需要向下遍历了,你想想前面的字符都不包含的话,你再向后遍历有什么用呢?

8.png

四、编码实现

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        int i,j,n=strs.size();//初始化数据
        string s=strs[0],t,k="";//将第一个字符串作为基底,k作为子串前缀和
        for(i=0;i<s.size();i++)
        {
            t=s.substr(0,i+1);//依次向后遍历,前缀和逐步增大
            for(j=1;j<n;j++)//遍历其它数组元素
            {
                if(strs[j].find(t)!=0)//只要不存在这个前缀
                    return k;//直接输出拜拜
            }
            k=t; //否则更新一下数据
        }
        return k;
    }
};

五、测试结果

2.png

1.png