力扣第14题:最长公共前缀

文章介绍了如何使用C++编写一个函数来查找字符串数组中的最长公共前缀,通过迭代比较每个字符串的相同字符并存储到公共前缀字符串中,适用于给定元素个数已知和未知的情况。
摘要由CSDN通过智能技术生成

题目描述:

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

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

示例

示例 1:

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

示例 2:

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

提示

  • 1 <= strs.length <= 200
  • 0 <= strs[i].length <= 200
  • strs[i] 仅由小写英文字母组成

思路 

考虑个数已知的情况

先尝试写出给定元素个数的情况,找一找思路。选择strs = ["flower","flow","flight"]

int main()
{
    string strs_1 = "flower";
    string strs_2 = "flow";
    string strs_3 = "flight";
    string str_com;
    string str_com_final;
    
    for(size_t i=0;i<min(strs_1.size(),strs_2.size());i++)   //size_t是unsigned int类型,因为size一定为正,这样可以防止警告
    {
        if(strs_1[i]==strs_2[i])
            str_com+=strs_1[i];  //+=和push.back()等价,都是在数组尾部添加并自动增长数组的。
            //直接对str_com[i]赋值无效,因为str_com的长度为0,这也是可以运行但没有输出的原因。
        else
            break; //找到第一个不一致的元素则直接退出循环。
            
    }
    for(size_t i=0;i<min(str_com.size(),strs_3.size());i++) 
    {
        if(str_com[i]==strs_3[i])
            str_com_final+=strs_3[i];  
    }
    for(size_t j=0;j<str_com_final.size();j++)
    {
        cout<<str_com_final[j];
    }
    return 0;
}

我们先将strs_1和strs_2中的相同元素找出来,存入str_com数组中,若遇到第一个不同元素则跳出循环。再将str_com与strs_3中的相同元素找出来存入str_com_final,同样遇到第一个不同元素则跳出循环。str_com_final即为三者的公共前缀。

考虑个数未知的情况

封装函数

我们可以把两个字符串找公共前缀的过程写成一个函数,返回值为公共前缀的字符串。

string common_prefix(vector<string>& strs,string str_compare,int count)
{
    string str_com;
    for(size_t j=0;j<min(str_compare.size(),strs[count].size());j++)   //size_t是unsigned int类型,因为size一定为正,这样可以防止警告
    {
        if(str_compare[j]==strs[count][j])
            str_com+=strs[count][j];  //+=和push.back()等价,都是在数组尾部添加并自动增长数组的。
            //直接对str_com[i]赋值无效,因为str_com的长度为0,这也是可以运行但没有输出的原因。
        else
            break; //找到第一个不一致的元素则直接退出循环。
    }
    return str_com;
}

如上函数的作用是找到strs[count]与str_compare的公共前缀str_com并将其作为返回值。

实现功能
string str_com=strs[0];
for(size_t i=0;i<strs.size();i++)
{
    str_com=common_prefix(strs,str_com,i);
}

首先将strs[0]的值给str_com,相当于给str_com一个初始的字符串。接着从str[1]开始与str_com找公共前缀,公共前缀再作为新的str_com,与str[2]找公共前缀......,最终的str_com即为strs数组中各个字符串的公共前缀。

总结

该方法可以通过leetcode的测试,但似乎在执行速度上有所欠缺......

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值