/*
本例按字符出现顺序输出,时间复杂度O(n),空间O(n)
1、一共256个字符,申请长度为256的字符列表charInfos[256],charInfos[c]中记录字符c的数量和位置。
2、申请一个字符数组chars,按顺序记录出现的字符,num为其长度。
3、输入:略
4、输出:字符数组chars,如果字符chars[i]出现的次数charInfos[chars[i]].count大于1,即可输出该字符和它的位置。
*/
#include <iostream>
#include <string>
#include <vector>
using namespace std;
struct CharInfo {
int count = 0;
vector<int> positions;
};
int main() {
string input;
while (getline(cin, input)) {
CharInfo charInfos[256]; // ASCII 码表大小
int num = 0; // 不同字符的数量
int chars[100]; // 用于存储这些字符,
for (int i = 0; i < input.length(); ++i) {
unsigned int c = input[i];
if (charInfos[c].count == 0)
chars[num++] = c;
charInfos[c].count++;
charInfos[c].positions.push_back(i);
}
for (int i=0; i<num; ++i)
{
int c = chars[i]; // 字符
int n = charInfos[c].positions.size(); // 字符的数量
if(n==1) continue;
for(int j=0; j<n; j++){
cout<<char(c)<<":"<<charInfos[c].positions[j];
if(j!=n-1)
cout<<",";
}
cout<<endl;
}
}
return 0;
}