1. 程式人生 > >zcmu 2193: Newspaper Headline()

zcmu 2193: Newspaper Headline()

【題目】

【題意】

給出模式串和主串,問需要多少個模式串拼接刪去多餘部分可得到主串。若不存在答案則輸出-1。

【思路】

若是主串中出現模式串中沒有的字母,則不存在。

模擬匹配,統計次數。

【程式碼】

#include <cstdio> 
#include <cstdlib> 
#include <cstring> 
#include <cmath> 
#include <cstdlib> 
#include <map> 
#include <set> 
#include <list> 
#include <vector> 
#include <stack> 
#include <queue> 
#include <algorithm> 
#include <iostream> 
#define mem(a) memset(a,0,sizeof(a)) 
#define go(i,a,b) for(int i=a;i<=b;i++) 
#define og(i,a,b) for(int i=a;i>=b;i--) 
using namespace std; 
const int maxn=10000; 
const int inf=0x3f3f3f3f; 
typedef long long ll; 
typedef unsigned long long ull; 
main() 
{ 
    set <int> a[30]; 
    string s1,s2; cin>>s1>>s2; 
    int l1=s1.size(),l2=s2.size(); 
    go(i,0,l1-1) a[s1[i]-'a'].insert(i); 
    int f=1,n=-1,ans=1; 
    go(i,0,l2-1) 
    { 
        int m=s2[i]-'a'; 
        if(a[m].empty()) f=0; //判斷是否可行
        set <int> :: iterator it=a[m].upper_bound(n); 
        if(it==a[m].end()) n=-1,ans++; //若匹配到模式串末尾,更新位置n
        n=*a[m].upper_bound(n); 
    } 
    if(f) cout<<ans<<endl; 
    else cout<<"-1\n"; 
}