AcWing 3610. 找位置
原题链接
简单
作者:
熵减E
,
2024-01-26 16:30:20
,
所有人可见
,
阅读 29
#include <cstdio>
#include <vector>
#include <map>
#include <cstring>
#include <algorithm>
using namespace std;
int main() {
char str[110] = {0};
scanf("%s",str);
multimap<char,int> mymap;
vector<char> seq; //记录每个字符出现的先顺序
for(int i = 0; i < strlen(str); ++i){ //str[i] != '\0'
if(find(seq.begin(),seq.end(),str[i]) == seq.end()){ //说明字符str[i]是第一次出现
seq.push_back(str[i]); //则加入seq中,即记录字符出现的顺序
}
mymap.insert({str[i],i});
}
vector<char>::iterator it; //it是字符出现顺序seq的迭代器
multimap<char,int>::iterator it1;
for(it = seq.begin(); it != seq.end(); ++it){
if(mymap.count(*it) > 1){ //该字符在mymap中重复出现
bool isFirst = true; //引入isFirst,为了去掉每行结尾的逗号
for(it1 = mymap.begin(); it1 != mymap.end(); ++it1){
if(it1->first == *it){ //seq中的字符和mymap中的键 相匹配时
if(isFirst == false){
printf(",");
}
printf("%c:%d",it1->first,it1->second);
isFirst = false;
}
}
printf("\n");
}
}
return 0;
}