题目链接:
Subsequences in Substrings
Kattis - subsequencesinsubstrings
题目大意:给你字符串s和t。然后让你在s的所有连续子串中,找出这些连续子串中的非连续子串中包含t的有多少个。
具体思路:我们枚举s的每一个位置,然后判断一下s的包含t的非连续子串中到达那个位置,然后这个字符串两边的长度相乘就是当前位置开始,满足条件的字符位置。然后我们在找从上一次找到首字母位置下一个开始, 继续往下找就可以了。
AC代码:
#include<bits/stdc++.h>
using namespace std;
# define ll long long
const int maxn = 4e5+;
int main()
{
ios::sync_with_stdio(false);
string s,t;
cin>>s>>t;
ll len1=s.size();
ll len2=t.size();
ll ans=;
ll pos=-;
while()
{
int st,ed;
st=s.find(t[],pos+);
if(st==-)break;
ed=st;
for(int i=;i<len2;i++){
ed=s.find(t[i],ed+);
if(ed==-)break;
}
if(ed==-)break;
ans+=(st-pos)*(len1-ed);
pos=st;
}
printf("%lld\n",ans);
}