zcmu 2193: Newspaper Headline()
阿新 • • 發佈:2018-12-13
【題目】
【題意】
給出模式串和主串,問需要多少個模式串拼接刪去多餘部分可得到主串。若不存在答案則輸出-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"; }