力扣最长公共前缀c++

题目

编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
**输入:**strs = [“flower”,“flow”,“flight”]
输出:“fl”
示例 2:
**输入:**strs = [“dog”,“racecar”,“car”]
输出:“”
**解释:**输入不存在公共前缀。
提示:
1 <= strs.length <= 200
0 <= strs[i].length <= 200
strs[i] 仅由小写英文字母组成

解题算法

  • 先找出最短的字符串,然后进行前缀比较
public:
  string longlongestCommonPrefix(vector<string>& strs) {
     string shortest = strs[0];//假定最短的字符串是数组的第一个
     for(auto i:strs){//遍历一遍,找到最短的字符串
       if(i.size()<shortest.size()){
         shortest = i;
       }
     }
       //判断最短的字符串是否为空,是空的话,直接返回空
       if(shortest != " "){
         int a=1;//用来截取第一个字母
         string prefix;//用来定义最短字符串前缀
         for(; a<=shortest.size();a++){
           prefix=shortest.substr(0,a)//从索引0开始截取a个字符
           for(auto i:strs){//遍历数组里的每一个字符串
             if(i.substr(0,a)!=prefix){//如果不满足,那么前缀是当前的长度-1
               return shortest.substr(0,a-1)
             }
           }
         }
         return prefix;
       }
       return "";
   }

shortest.substr(0, sz)表示从索引0开始截取 sz 个字符,即获取最短字符串的前缀。
for(auto i : strs) 循环遍历了字符串向量 strs 中的每个字符串,并使用变量 i 依次表示每个字符串。
在这里插入图片描述

  • 先两个字符串进行对比,对比出结果之后再和第三个进行对比
if (strs.empty()) {
        return "";
    }
    string prefix = strs[0];  // 初始化前缀为第一个字符串
    for (int i = 1; i < strs.size(); ++i) {
        while (strs[i].find(prefix) != 0) {//判断字符串 strs[i] 是否以前缀 prefix 开头
            // 当前字符串没有以前缀开头,则将前缀缩减一个字符长度
            prefix = prefix.substr(0, prefix.length() - 1);
        }
    }
    return prefix;

.find(prefix) 是调用字符串的 find 函数来查找子串 prefix 在字符串 strs[i] 中的位置
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值