leetcode-14

https://leetcode-cn.com/problems/longest-common-prefix/

思路:纵向遍历

string longestCommonPrefix(vector<string>& strs) {
    string res = "";
    int i = 0;
    if (strs.size() <= 0) {
        return res;
    }
    while(i < strs[0].size()) {
        for (int j = 1;j < strs.size(); j++) {
            if (strs[j][i] != strs[0][i]) {
                return strs[0].substr(0, i);
            }
        }
        i += 1;
    }
    return strs[0];
}

 

思路:字典排序,取minvalue、maxvalue

int strcmp_new(string s1, string s2) {
    int value = min(s1.size(), s2.size());
    for (int i = 0; i < value; i++) {
        if (s1[i] > s2[i]) {
            return 1;
        } else if (s1[i] < s2[i]) {
            return 0;
        }
    }
    if (s1.size() > value) {
        return 1;
    }
    return 0;
}

string longestCommonPrefix(vector<string>& strs) {
    string res = "";
    int i = 0;
    if (strs.size() <= 0) {
        return res;
    }
    string min_value = strs[0];
    string max_value = strs[0];
    for (int i = 1; i < strs.size(); i++) {
        if (strcmp_new(strs[i], min_value) == 0) {
            min_value = strs[i];
        }
        if (strcmp_new(strs[i], max_value) == 1) {
            max_value = strs[i];
        }
    }
    for (int i = 0; i < min_value.size(); i++) {
        if (min_value[i] != max_value[i]) {
            return min_value.substr(0, i);
        }
    }
    return min_value;
}

思路:minmax_element获取字典最小值、最大值,效率会比上面效率提升很大。

string longestCommonPrefix(vector<string>& strs) {
    string res = "";
    int i = 0;
    if (strs.size() <= 0) {
        return res;
    }
    auto value = minmax_element(strs.begin(), strs.end());
    for (int i = 0; i < value.first->size(); i++) {
        if (value.first->at(i) == value.second->at(i)) {
            continue;
        } else {
            return value.first->substr(0, i);
        }
    }
    return *(value.first);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值