multimap版
#include<iostream>
#include<cstring>
#include<algorithm>
#include<map>
using namespace std;
//查找vector是否存在特定元素:vector没有自带的find
bool findVec(vector<char> vec,char c){
for(auto x : vec){
if(x == c) return true;
}
return false;
}
int main(){
string str;
cin>>str;
multimap<char,int> m1;//按序存储str的哈希
vector<char> v1;//记录str中出现过的字母:按顺序去重插入
for(int i = 0;i < str.size();i++){
m1.insert({str[i],i});
if(!findVec(v1,str[i])) v1.push_back(str[i]);
}
multimap<char,int>::iterator it;
for(auto x : v1){
if(m1.count(x) > 1){
it = m1.lower_bound(x);
cout<<it->first<<":"<<it->second;
it++;
for(;it != m1.upper_bound(x);it++){
cout<<","<<it->first<<":"<<it->second;
}
cout<<endl;
}
}
return 0;
}
map版
#include<iostream>
#include<cstring>
#include<algorithm>
#include<map>
using namespace std;
//查找vector是否存在特定元素:vector没有自带的find
bool findVec(vector<char> vec,char c){
for(auto x : vec){
if(x == c) return true;
}
return false;
}
int main(){
string str;
cin>>str;
map<char,vector<int>> timesMap;//记录每个字符的位置和次数
vector<char> charSeq;//记录每个字符出现的先后顺序
for(int i = 0;i < str.size();i++){
timesMap[str[i]].push_back(i);
//如果是第一次出现
if(timesMap[str[i]].size() == 1){
charSeq.push_back(str[i]);
}
}
for(auto x : charSeq){
vector<int> cur = timesMap[x];//当前字符的次数集合
if(cur.size() == 1) continue;
cout<<x<<":"<<cur[0];
for(int i = 1;i < cur.size();i++){
cout<<","<<x<<":"<<cur[i];
}
cout<<endl;
}
return 0;
}