题目描述:CodeForces 91A Newspaper Headline

思路:

先用一个b数组记录A字符串中出现的字母,用a数组记录字母出现的顺序,然后遍历B字符串搜索

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <queue>
#include <stack>
 
using namespace std;
 
char s1[10009],s2[1000009];
int a[10009][26],b[26];
 
int main()
{
    while(~scanf("%s %s",s1,s2))
    {
        memset(a,-1,sizeof(a));
        memset(b,0,sizeof b);
        int sum=0,flag=0;
        int len1=strlen(s1),len2=strlen(s2);
        for(int i=0; i<len1; i++)
        {
            b[s1[i]-'a']=1;
            for (int j=0; j<=i; j++)
                if (a[j][s1[i]-'a']==-1) a[j][s1[i]-'a']=i;
        }
        for (int i=0; i<len2; i++)
            if (!b[s2[i]-'a'])
            {
                printf("-1\n");
                flag=1;break;
            }
        if(flag) continue;
        int j=0;
        while(j<len2)
        {
            sum++;
            int i=0;
            while(j<len2&&i<len1&&a[i][s2[j]-'a']!=-1)
            {
                i=a[i][s2[j]-'a']+1;
                j++;
            }
        }
        printf("%d\n",sum);
    }
    return 0;
}