最小距离查询

#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;
    }
全部评论

相关推荐

点赞 评论 收藏
分享
目前大二,中流211,这个简历能找到实习嘛?想知道八股要背到什么程度能开始投简历呢tot能投大厂吗
牛客44176770...:兄弟,先不急着找大厂实习吧,真的😭面试问的挺深的,会表面八股根本行不通,你的项目人家都没心情问😭小厂实习可以去吧,我就是有个小厂实习才有一个且仅有一个约面机会。而且,一开始就先问算法题,然后是八股MySQLRedis这些。你平时看这些,以为自己会了,但是在面试中问你,对于MySQL你了解多少,你能在面试中有逻辑的回答出来吗?而且,你大二,人家对你的项目根本不感兴趣,只问你基础。唉今天刚结束百度一面,我这几天都重点复盘了做过的项目,结果根本不问,问就问一个lua脚本怎么写。😭真的兄弟,咱不是天才,真得一步一步来,扎实基础😔😔
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务