#include <iostream>
#include <cstdio>
#include <string>
#define max 200200
using namespace std;
char strTmp[max / 2];
string str;
int ans[max];
int lastPosLoc[26];
int n;
void getAns(int now) {
int t = str[now] - 'a';
if (lastPosLoc[t] == -1) {
lastPosLoc[t] = now;
ans[now] = max;
} else {
ans[now] = now - lastPosLoc[t];
if (ans[now] < ans[lastPosLoc[t]]) {
ans[lastPosLoc[t]] = ans[now];
}
lastPosLoc[t] = now;
}
}
int main(int argc, char** argv) {
int t;
scanf("%d", &t);
while (t--) {
scanf("%s", strTmp);
str = strTmp;
scanf("%d", &n);
for (int i = 0; i < 26; ++i) lastPosLoc[i] = -1;
for (int i = 0; i < str.size(); ++i) getAns(i);
while (n--) {
char op[10];
scanf("%s", op);
string opStr = op;
if (opStr == "INSERT") { // INSERT a
char c;
scanf(" %c", &c);
str += c;
getAns(str.size() - 1);
} else { // QUERY 1
int tar;
scanf("%d", &tar);
if (ans[tar] < max) printf("%d\n", ans[tar]);
else printf("-1\n");
}
}
}
return 0;
}
2013计算机D 最小距离查询
最新推荐文章于 2021-02-04 18:50:55 发布