一起养成写作习惯!这是我参与「掘金日新计划 · 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的时候就不需要向下遍历了,你想想前面的字符都不包含的话,你再向后遍历有什么用呢?
四、编码实现
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;
}
};