leetcode 第14题 最长前缀

8 篇文章 0 订阅

14 最长前缀

我的 思路 是 先从前面两个串中找到一个待修正的共同前缀,然后再剩余的串中来调整该前缀,这样的时间复杂度为o(n)

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
    if(strs.size() == 0)    return string("");
    if(strs.size() == 1)    return strs[0];
    unsigned int Minlen,i(0);
    string strMax,strMin;
    vector<string>::iterator it = strs.begin();
    (*it).length() > (*(it + 1)).length() ?  (strMax = *it,strMin = *(it + 1)):
                                            (strMin = *it,strMax = *(it + 1));
    Minlen = strMin.length();
    while(strMax[i] == strMin[i] && i < Minlen) i ++;
    string prefix(strMax.begin(),strMax.begin() + i);
    for(it = it + 2; it != strs.end(); it ++)
    {
        if(prefix.size() == 1 && (*(it))[0] != prefix[0])//当前缀为一个字符的时候,所有字符串的第一个
            return "";                                  //字符就必须是该字符
        else if(prefix.size() == 1)
                continue;
        while((*(it)).find(prefix) != 0)//如果不能在字符串的开始处找到,就减去prefix最后一个字符,
        {                               //直到找到为止
            if(0 == prefix.size())
                return "";
            prefix.resize(prefix.size() - 1);
        }
    }
    return prefix;
    }
};

测试用例:

[]
["",""]
[""]
["a","c"]
["ca","a"]
["abcd","ab","acd"]//通过找最长和最短串的公共串,然后再其他串中找该子串的方法不行
["baab","bacb","b","cbc"]  //忽略了必须是前缀(前三个共同前缀为"b",如果通过查找,那么会在最后一个串中找到"b"
["abca","aba","aaab"]//同上
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值