题意:给定一行字符串(都是小写字母),每一个字符都代表一只青蛙以及其国籍,若字符串中出现两个字符相同,则这两个字符所代表的青蛙来自同一国度,可称之为好朋友。

现在需要找到距离最近的好朋友并输出他们的距离。

思路:建立一个map映射表,映射关系为:字符<->字符所在字符串的位置,从字符串头部到尾部依次进行扫描,每扫到一个字符,可以找一找map表中有没有出现该字符,若没出现过则在

表中建立这个字符的关系,若map表中有该字符的记录,那么说明当前字符串代表的青蛙找到了一个朋友,可以计算他与朋友的距离,并更新最短距离。之后map表也要更新这个字符的信息,

即把字符所在位置改为当前位置以方便后续的操作。

AC代码:

#define _CRT_SECURE_NO_DEPRECATE
#include<iostream>
#include<algorithm>
#include<string>
#include<set>
#include<map>
using namespace std;
string s;
map<char, int>m;//coutry<->position
int main() {
int T;
scanf("%d",&T);
int k = ;
while (T--) { k++;
cin >> s;
int dis = INT_MAX;
m.clear();//每次用完需要清空map表
for (int i = ; i < s.size(); i++) {
map<char,int>::iterator it = m.find(s[i]);
if (it != m.end()) {//集合中找到了这只青蛙的同伴
int distance = i - it->second;
if (distance < dis)dis = distance;
m.erase(s[i]);//更新青蛙位置
m.insert(make_pair(s[i], i));
}
else {
m.insert(make_pair(s[i],i));//新元素,记录位置
}
}
if (dis >= s.size())
printf("Case #%d: -1\n", k);
else
printf("Case #%d: %d\n",k,dis); }
return ;
}

最新文章

  1. C#winfrom中splitContainer的用法
  2. html随笔
  3. C++ 中复杂的声明
  4. SMB/CIFS协议解析一概述
  5. C#实现从EXCEL文件读取数据到SqlServer数据库
  6. Katu Puzzle
  7. javascript(js)中的substring和substr方法
  8. Object lifetime
  9. 全栈JavaScript路(八)得知 CDATASection 种类 节点
  10. 低功耗蓝牙BLE外围模式(peripheral)-使用BLE作为服务端
  11. php传输大数据大文件时候php.ini相关设置
  12. ubuntu文件目录详细介绍
  13. Java程序员必须掌握的线程知识-Callable和Future
  14. Pi Hybrids问题
  15. 6-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案升级篇-优化升级(安装Apache (Web服务器)软件,测试HTTP)
  16. mysql数据库优化(一)
  17. encoding and Endian
  18. CSS-3 新弹性盒模型属性
  19. mysql存储引擎innodb、myisam区别
  20. Angular 4.0从入门到实战

热门文章

  1. cocos2dx 3.x c++代码打包给lua调用过程(mac)
  2. VS2013连接SQL Server 2008 R2测试
  3. B. Anatoly and Cockroaches
  4. Flask-蓝图、模型与CodeFirst
  5. 【线程池】ExecutorService与quartz搭配出现的问题
  6. destoon 信息发布表单提交验证
  7. 转载:将画布(canvas)图像保存成本地图片的方法
  8. 购物车小程序(while循环,列表)
  9. 用python编写简易登录接口
  10. Java并发编程的艺术 记录(三)