> 简洁易懂讲清原理,讲不清你来打我~

输入字符串数组,输出字符串为公共前缀

![在这里插入图片描述](https://img-blog.csdnimg.cn/bb4bce9ed73940f79919032f0a043c13.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/53c5e14222af4fce9bb75e9f0334a4c3.png)

> 暴力

简单的思路
第一个作为模板,对每个字符数组进行匹配,对于每个字符串,从头到尾匹配,不能匹配或者超出最右时就不再匹配并更新最右边界

精确的定义
mostRight是最长公共前缀到最右的地方
right是两字符串公共前缀最右的地方
i是正在匹配的字符串下标
str1是拿来匹配的模板

```cpp
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
if(strs.size()==0)return "";
string str1=strs[0];
int mostRight=str1.size();
for(int i=1;i<strs.size();i++){
int right=-1;
while(right+1<strs[i].size()&&right+1<=mostRight&&strs[i][right+1]==str1[right+1]){
right++;
}
mostRight=right;
}
if(mostRight==-1)return "";
return str1.substr(0,mostRight-0+1);
}
};
```

时间复杂度Omn,m是字符串平均长度,n是字符串数量,最差情况每个字符串每个字符都遍历


1
> 喜欢简洁易懂还能讲清楚原理博客的小伙伴就关注关注这个非常高产的博主呀,下次再会~

 

posted on 2021-07-24 00:06  offer快到碗里来~  阅读(43)  评论(0)    收藏  举报