题解 | #找位置#
找位置
https://www.nowcoder.com/practice/e3b2cc44aa9b4851bdca89dd79c53150
#include <iostream> #include <vector> #include <map> using namespace std; struct statis{ int count; vector<int> index;//定义迭代器存储对应下标 }; int main() { string str; while(cin>>str){ map<char,statis> mp;//定义散列表,存储字符-统计对应关系 for(int i=0;i<str.length();i++){ if(!mp[str[i]].count) mp[str[i]].count=1; else mp[str[i]].count++; //迭代器使用头插法,方便输出下标时按序从尾部弹出 mp[str[i]].index.insert(mp[str[i]].index.begin(),i); } for(int i=0;i<str.length();i++){ if(mp[str[i]].count>1){ cout<<str[i]<<":"<<i;//输出结构控制:第一次只输出数对,后面的每对前面都带一个逗号 mp[str[i]].index.pop_back(); for(int j=1;j<mp[str[i]].count;j++){//注意j边界,不要写成index.size(),那样是错的 cout<<","<<str[i]<<":"<<mp[str[i]].index.back(); mp[str[i]].index.pop_back(); } mp[str[i]].count=-1; cout<<endl; } } } return 0; }