题目:http://10.105.242.80/problem/p/94/
直接左一个右一个查询会超时,这里用了一个map存储,采用空间换时间的策略,ac
#include<stdio.h>
#include<bits/stdc++.h>
using namespace std;
int main(){
int T;
scanf("%d",&T);
while(T--){
char buf1[100001];
map<char,vector<int> > mp;
scanf("%s",buf1);
string s(buf1);
for(int i=0;i<s.length();i++){
mp[s[i]].push_back(i);
}
int N;
scanf("%d",&N);
while(N--){
char buf2[10];
scanf("%s",buf2);
string os(buf2);
if(os=="INSERT"){
char buf3[20];
scanf("%s",buf3);
s.insert(s.end(),buf3[0]);
mp[buf3[0]].push_back(s.length()-1);
}else if(os=="QUERY"){
int index;
scanf("%d",&index);
char c=s[index];
int result=-1;
vector<int> tv=mp[c];
int min=100010;
for(int i=0;i<tv.size();i++){
if(abs(tv[i]-index)<min && tv[i]!=index){
min=abs(tv[i]-index);
result=min;
}
}
printf("%d\n",result);
}
}
}
return 0;
}