公共前缀--不用内置函数和使用内置函数版本

题目:

在这里插入图片描述

不用内置函数解题(c++)

解题步骤:
1.寻找其中最短的字符串,记录其长度
2.按列遍历,当出现不相等标记该列
3.根据标记更新res字符串,最后返回它便是答案

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        if(strs.size()==0)return "";
        //min用于求这里面最短的字符串。
        int min = strs[0].size();
        string res = "";
        //flag用于标记从哪一列开始不相等了。
        int flag = 0;
for(int i=0;i<strs.size();i++){
    if(strs[i].size()<min){
        min = strs[i].size();
    }
}
int k=0;
for(;k<min;k++){
    for(int j=1;j<strs.size();j++){
        if(strs[j][k]!=strs[j-1][k]){
//goto语句的应用防止之后仍不断遍历,毕竟有两层循环不能用break,当然也可根据设置标签用两个break
           flag = k;
           goto end;
        }
    }
}
end:
    for(int q=0;q<k;q++){
    res.push_back(strs[0][q]);  
    }
return res;

    }
};

使用内置函数简化代码

1.相比上一段,利用排序将string数组按照长度从小到大的顺序排列。
2.使用了substr方法对结果进行返回

class Solution {
public:
    static bool compare(const string &a, const string &b){
        return a.size()<b.size();
    }
    string longestCommonPrefix(vector<string>& strs) {
        sort(strs.begin(), strs.end(),compare);
        if(strs.size()==0 || strs[0].size()==0 ){
            return "";
        }
        for(int i=0;i<strs[0].size();i++){
            for(int j=1;j<strs.size();j++){
                if(strs[j][i]!=strs[j-1][i]){
                    return strs[0].substr(0,i);
                }
            }
        }
        return strs[0];
    }
};

效率比较

用leetcodeOJ平台,两者几乎完成时间没有任何区别。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值