时间限制:1秒 空间限制:32768K
题目描述
对给定的一个字符串,找出有重复的字符,并给出其位置,如:abcaaAB12ab12输出:a,1;a,4;a,5;a,10,b,2;b,11,1,8;1,12, 2,9;2,13。
输入描述: 输入包括一个由字母和数字组成的字符串,其长度不超过100。
输出描述: 可能有多组测试数据,对于每组数据, 按照样例输出的格式将字符出现的位置标出。
1、下标从0开始。 2、相同的字母在一行表示出其出现过的位置。
输入例子: abcaaAB12ab12
输出例子: a:0,a:3,a:4,a:9
b:1,b:10
1:7,1:11
2:8,2:12
思路:1.首先打个表(或者用map),记录一下每个字母出现的个数
2.对出现字数超过2个的字母,再来找其出现的具体位置
3.最后输出的顺序是按照字母出现的先后顺序来的(map会自动排序诶o(╯□╰)o)
代码:
#include <iostream> #include <map> using namespace std; int main(){ map<char,int> a; int flag; string str; while(cin>>str){ for(int i=0;i<str.size();i++) a[str[i]]++; for(int i=0;i<str.size();i++){ if(a[str[i]]>1){ flag=0; for(int j=0;j<str.size();j++){ if(str[i]==str[j]&&flag==0){ cout<<str[i]<<':'<<j; flag=1; } else if(str[i]==str[j]&&flag==1){ cout<<','<<str[i]<<':'<<j; } } a.erase(str[i]);//防止再次输出 cout<<endl; } } a.clear(); } return 0; }