CodeForces 523C. Name Quest 字符串

一开始把题意理解错了,,想成了一个从正面开始比较,一个从反面开始比较,两个相向而行,然后导致代码37行发生重大错误!!!

题意应该是:

给你一个字符串a和b

让你把b分割成两部分,然后每部分里面的字母按照他说的规则都可以与a匹配,问最多有多少种分发?

贪心:从正面开始找到,满足条件的最小的mark_l的index,从反面开始找a字符串的转置的最大的mark_r的index 然后结果就是mark_r-mark_l

代码如下:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <map>
using namespace std;
string s;
string t;
int main()
{
    freopen("3.txt","r",stdin);
    cin>>s>>t;
    int mark_r = 0;//ср╠ъ©╙й╪ур
    int mark_l = 0;//вС╠ъ©╙й╪ур
    int mark = 0;
    char target = s[mark];
    bool ok_l = false;
    bool ok_r = false;

    for(int i=0;i<t.length();i++)
    {

        if(t[i] == target)
        {
            mark++;
            if(mark == s.length())
            {
                //cout<<i<<endl;
                mark_l = i;
                ok_l = true;
                break;
            }
            target = s[mark];

        }
    }
    mark = s.length()-1;
    target = s[mark];
    //cout<<target<<endl;
    //cout<<endl;
    //cout<<"j"<<endl;
    //cout<<endl;
    for(int j = t.length()-1;j>mark_l;j--)
    {
        if(t[j] == target)
        {
            //cout<<j<<endl;
            mark--;
            if(mark < 0)
            {
                //cout<<j<<endl;
                mark_r = j;
                ok_r = true;
                break;
            }

            target = s[mark];
            //<<target<<endl;
        }
    }
    if(ok_r && ok_l)
    {
        cout<<mark_r-mark_l<<endl;
    }
    else{
        cout<<"0"<<endl;
    }
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值