HHU Friendship of Mouse(map)

問題 B: Friendship of Mouse

時間限制: 1 Sec  內存限制: 64 MB
提交: 24  解決: 15
[提交][狀態][討論版]

題目描述

Today in KBW, N mice from different cities are standing in a line. Each city is represented by a lowercase letter. The distance between adjacent mice (e.g. the 1st and the 2nd mouse, the N−1th and the Nthmouse, etc) are exactly 1. Two mice are friends if they come from the same city.

The closest friends are a pair of friends with the minimum distance. Help us find that distance.

輸入

First line contains an integer T, which indicates the number of test cases.

Every test case only contains a string with length N, and the ith character of the string indicates the city of ith mice.

⋅ 1≤T≤50.

⋅ for 80% data, 1≤N≤100.

⋅ for 100% data, 1≤N≤2000.

⋅ the string only contains lowercase letters.

輸出

For every test case, you should output "Case #x: y", where x indicates the case number and counts from 1 and y is the result. If there are no mice in same city, output −1 instead.

樣例輸入

2
abcecba
abc

樣例輸出

Case #1: 2
Case #2: -1

提示

很簡單,如果每次出現一個字符就更新這個字符在map中的位置就可以了,判斷一個元素是否出現過可以用map來快速判斷
//
//  main.cpp
//  Friendship of Mouse
//
//  Created by 張嘉韜 on 16/9/4.
//  Copyright © 2016年 張嘉韜. All rights reserved.
//

#include <iostream>
#include <cstring>
#include <cstdio>
#include <map>
using namespace std;
const int inf=1<<30;
map <char,int> pos;
int main(int argc, const char * argv[]) {
    //freopen("/Users/zhangjiatao/Documents/ACM/input.txt","r",stdin);
    int T;
    scanf("%d",&T);
    for(int t=1;t<=T;t++)
    {
        pos.clear();
        string a;
        cin>>a;
        int minimum=inf;
        for(int i=0;i<a.size();i++)
        {
            char temp=a[i];
            if(pos[temp]==0) pos[temp]=i+1;
            else
            {
                minimum=min(minimum,i+1-pos[temp]);
                pos[temp]=i+1;
            }
        }
        if(minimum==inf) minimum=-1;
        printf("Case #%d: %d\n",t,minimum);
    }
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章