最小距离查询

#include <iostream>
#include<vector>
#include<string.h>
#include<stdio.h>
#include<cmath>
using namespace std; 


int main(){
    int b,t;
    char s[1000005];  //存的时候使用2维数组去存储 因为s要求的长度太长了  
    int c;
    scanf("%d",&t);
    while(t--){
        vector<vector<int> > p(27);   //这个相当于2维数组的定义方法 
        memset(s,0,sizeof(s)); 
        scanf("%s",s);
        int length=strlen(s);
        for(int i=0;i<length;i++){
            p[s[i]-'a'].push_back(i);   
        }
        int m;
        scanf("%d",&m);
        for (int i=0;i<m;i++){
            char temp[20];
            scanf("%s\n",temp);   //读取字符串的时候要把空格读进来 

            if(strcmp(temp,"INSERT")==0){
                char ch;
                scanf("%c",&ch);
                s[length]=ch;   //s[length]:'\0'  a
                s[length+1]='\0';  //保持字符串的完整性 
                p[ch-'a'].push_back(length);  
                length=length+1;     
            } 
            else if(strcmp(temp,"QUERY")==0){
                int x;
                scanf("%d",&x);
                if(p[s[x]-'a'].size()==1){  //数组的长度是1说明只有它自己一个元素 
                    printf("-1\n");
                } 
                else{
                    int min_value=100000000;
                    for(int j=0;j<p[s[x]-'a'].size();j++){
                        if(abs(p[s[x]-'a'][j]-x)<min_value&&abs(p[s[x]-'a'][j]-x)!=0)
                            min_value=abs(p[s[x]-'a'][j]-x);
                    }
                    printf("%d\n",min_value);
                }
            }
        } 
    }
    return 0;
    }
全部评论

相关推荐

点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务