leetcode最长公共前缀c++

该博客介绍了一个用于查找字符串数组中最长公共前缀的C++函数实现。通过遍历字符串数组并逐个比较字符,确定最长公共部分。在每次比较中,都会更新公共前缀,并在找到不匹配字符时截断。最后返回找到的最长公共前缀。这种方法旨在提高效率,减少不必要的字符比较。
摘要由CSDN通过智能技术生成

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

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

示例1:

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

示例2:

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

提示:

0 <= strs.length <= 200

0 <= strs[i].length <= 200

strs[i] 仅由小写英文字母组成

整体思路:

遍历后面的字符串,将其依次将其与 ans 进行比较,再两两找出公共前缀,最终结果即为最长公共前缀。其详细讲解已经附在代码中。 此代码只是给大家提供一个参考,其还需更多的打磨。另外很多他人的博客还有其他的方法,大家也可以去看一些其他的方法,开阔思维。

代码题解:

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
    string ans=strs[0];//先由ans设为初始值来进行比较
    int n=strs.size();
    if(strs.size()==0)
    return "";
    int min;//找到最短的字符串,公共前缀长度肯定小于它,这样进行单个字符对比时节省了时间,只需要对照前min个字符即可,后边的肯定不再符合要求。
    min=strs[0].size();
    for(int i=0;i<n;i++)
        min=min>strs[i].size()?strs[i].size():min;//以上代码求最短字符串长度
    for(int i=1;i<n;i++)//循环字符串数组,提取每一个字符串
    {
        int j=0;
      for(;j<min;j++)//此时ans和循环到的字符串进行单个字符的比较,min在这个地方用,节约时间
      {
          if(ans[j]!=strs[i][j])//ans本身就是一个字符串,ans[j]表示字符串ans中的第j个字符,strs[i]是一个字符串,后边再加[j]则表示其字符串中的第j个字符,一旦发现不相等,则停止比较
          break;
      }
      ans=ans.substr(0,j);//ans每一次比较都要进行更新,截取比较的相同的部分,然后继续与下一个字符串进行比较
      if(ans.size()==0)//一旦哪一次的比较截取之后的ans为空,则说明没有任何相同的前缀,整体返回空即可。
      return "";
    }
    return ans;
}
};

本人也是新手,刚开始练习,不足之处还请大家给出建议!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值