//1.统计字母 //2.判断是否重复 //3.找到下一个重复项的位置 #include<iostream> #include<algorithm> #include<string> #include<map> using namespace std; struct Mark { int count; //重复个数 int flag; //判断是否重复 }; map<char, Mark> M; int main() { string Str; int Next[1005]; while (cin >> Str) { for (int i = 0; i < Str.size(); i++) { M[Str[i]].count++; M[Str[i]].flag++; } for (int i = 0; i < Str.size(); i++) { for (int j = i + 1; j < Str.size(); j++) { if (Str[i] == Str[j]) { Next[i] = j; //记录下一个相同项位置。 break; } } } for (int i = 0; i < Str.size(); i++) { int temp = i; int flag = 0; while (M[Str[temp]].count && M[Str[temp]].flag >= 2) { cout << Str[temp] << ":" << temp; M[Str[temp]].count--; if (M[Str[temp]].count != 0) { cout << ","; } temp = Next[temp]; flag = 1; } if (flag == 1) { cout << endl; } } } }