思路
利用map将位置与字符对应,然后根据其出现顺序进行查找,其中关键一步是按照value去查找key值,将多次出现的字符位置进行记录后再输出。
代码如下
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <map>
using namespace std;
int main()
{
string input;
while (cin >> input) {
vector<char> s; //存放字符出现的顺序
map<int, char> position; //以位置为key,字符为value的map
for (int i = 0; i < input.length(); ++i) { //构建map
auto k = find(s.begin(), s.end(), input[i]);
if (k == s.end()) s.push_back(input[i]);
position.insert(pair<int, char>(i, input[i]));
}
for (int i = 0; i < s.size(); ++i) {
vector<int> result; //记录重复字符出现位置
for (auto t = position.begin(); t != position.end(); ++t) { //按照value查找key值
if (t->second == s[i]) result.push_back(t->first);
}
if (result.size() > 1) {
for (int j = 0; j < result.size(); ++j) {
if (j != result.size() - 1) cout << s[i] << ":" << result[j] << ",";
else cout << s[i] << ":" << result[j];
}
cout << endl;
}
}
}
}