一开始把题意理解错了,,想成了一个从正面开始比较,一个从反面开始比较,两个相向而行,然后导致代码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;
}
}