题目链接:点击这里
只要查找到子串中的出现在最后得字符出现的最早的位置输出就行了。
其实没必要记录全部的字符串,只要记录位置就够了。
AC代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
int main()
{
int n,m,q;
string s;
vector<int> v[27];
cin>>n;
cin>>s;
for(int i=0; i<s.size(); i++)
{
v[s[i]-'a'].push_back(i);
}
cin>>q;
while(q--)
{
int a[27]= {0};
string x;
cin>>x;
int ans=0;
for(int i=0; i<x.size(); i++)
{
ans=max(ans,v[x[i]-'a'][a[x[i]-'a']]+1);
a[x[i]-'a']++;
}
cout<<ans<<endl;
}
}