月月查华华手机
月月查华华的手机
https://ac.nowcoder.com/acm/problem/23053
开vector数组,记录每个字母的下标 查找时用二分查找
#include<bits/stdc++.h>
using namespace std;
vector<int>id[26];
int cnt[26];
char s[1000005];
int main(){
cin>>s;
int ls=strlen(s);
for(int i=0;i<ls;i++){
int t=s[i]-'a';
id[t].push_back(i);
cnt[t]++;
}
int n;cin>>n;
for(int i=1;i<=n;i++){
char t[1000005];cin>>t;
int lt=strlen(t),p=-1,jg=0,ans;
for(int j=0;j<lt;j++){
int ch=t[j]-'a',l=0,r=cnt[ch]-1;
jg=0;
while(l<=r){
int mid=(l+r)>>1;
if(id[ch][mid]>p)jg=1,ans=id[ch][mid],r=mid-1;
else l=mid+1;
}
if(jg==0)break;
p=ans;
}
if(jg==1)cout<<"Yes\n";
else cout<<"No\n";
}
}