leetcode 贪心算法 集合

44. Wildcard Matching

来自:leetcode44
模糊匹配问题
思路很简单:从头开始匹配,遇到“*”就在字符串s中继续找能够匹配字符串p的下一个字符的字符,同时需要记住当前星号的位置,以便回溯。

bool isMatch(string s, string p) {
    int sl=s.size(),pl=p.size();
    int i=0,j=0;
    int lasts=-1,lastp=-1;
    while(i<sl){
        //相等(包括存在"?"的情况)时,继续向后比较
        if(j<pl&&(s[i]==p[j]||p[j]=='?')){
            i++;
            j++;
        }
        //存在"*"时,继续比较s和p中"*"的下一个字符,此时p的位置固定
        else if(j<pl&&p[j]=='*'){
            lastp=j++;
            lasts=i;
        }
        //如果上述两种情况都不符合,回溯,回到"*"的下一个位置继续与s后面的字符比较
        else if(lasts>=0){
            i=++lasts;
            j=lastp+1;
        }
        //均不符合则不匹配
        else return false;
    }
    //考虑字符串p末尾有"*"的情况
    while(j<pl && p[j]=='*')
        j++;
    return (j==pl);
}

134. Gas Station

来自:leetcode134
因为构成一个圆环,所以开始将两个数组分别复制一份加在末尾;
从头开始找cost[i]<=gas[I]的点,找不到直接返回-1;
找到之后开始依次看能否到达下一个点(若当前点不能到达,就直接将下一个点作为起始点)

int canCompleteCircuit(vector<int>& gas, vector<int>& cost) {
    int len=gas.size();
    gas.insert(gas.end(),gas.begin(),gas.end());
    cost.insert(cost.end(),cost.begin(),cost.end());
    int lmp=-1,i;
    int carGas=0;
    for (i=0;i<len;i++){
        if(cost[i]<=gas[i]) {
            lmp=i;
            break;
        }
    }
    if(i==len)
        return -1;
    for(i;i<2*len;i++){

        if(carGas+gas[i]>=cost[i]){
            carGas=carGas+gas[i]-cost[i];
        }
        else if(lmp>=0 && lmp<len-1){
            lmp=i+1;
            carGas=0;
        }
        else return -1;
        if(i==(len+lmp-1))//绕了一圈回来之后,后面多余的就不用看了
            return lmp;
    }
    return -1;//这里不加会报错
}

*贪心感想:按照第一思路解题,遇到特殊点就解决

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值