#include <iostream> #include <cstdio> #include <algorithm> using namespace std; const int MAX_NUM = 75; //哈希表 struct HashTable { int len; //记录position数组的长度,即元素出现的次数 int *position; //数组记录字符出现的索引 }; /** * 找位置 * @return */ int main() { string str; while (cin >> str) { int length = str.size(); HashTable table[MAX_NUM]; //初始化哈希表 for (int i = 0; i < MAX_NUM; ++i) { table[i].len = 0; table[i].position = new int{0}; } /* * 遍历字符串 * 1.统计每个字符出现的次数 * 2.记录相同字符出现的位置索引 */ for (int j = 0; j < length; ++j) { int index = str[j] - '0'; table[index].position[table[index].len] = j; table[index].len++; } for (int k = 0; k < length; ++k) { //flag标记位,第一个不打印",",后续每个字符都打印"," bool flag = false; int index = str[k] - '0'; if (table[index].len > 1) { //该字符超过两个,则打印该字符及其索引 for (int i = 0; i < table[index].len; ++i) { if (flag) { cout << ","; } //打印字符 cout << str[k] << ":" << table[index].position[i]; flag = true; } cout << endl; } table[index].len = 0; } } return 0; }