题解 | 找位置
找位置
https://www.nowcoder.com/practice/e3b2cc44aa9b4851bdca89dd79c53150
用map集合统计每一个字符的出现次数。从头遍历输入的字符串,如果当前遍历到的字符在map集合中的哈希值大于1,就统计这个字符在原字符串中的所有下标并存在一个vector容器中。然后遍历这个vector容器,依次输出字符的下标,最后从map集合中删除已经遍历过的字符对应的键值对。
#include <iostream> using namespace std; #include "map" #include "vector" vector<int>pos(string str,char c){//得到一个字符的所有下标 vector<int>v; for(int i=0;i<str.size();i++){ if(str[i]==c){ v.push_back(i); } } return v; } int main() { string str; cin>>str; map<char,int>my_map; for(auto&a:str){//统计每个字符的数量 my_map[a]++; } for(auto a:str){ if(my_map[a]>1){//如果当前字符是重复的字符 vector<int>indexs=pos(str,a);//得到这个字符所有下标 for(int i=0;i<indexs.size();i++){ if(i!=indexs.size()-1) cout<<a<<":"<<indexs[i]<<","; else cout<<a<<":"<<indexs[i]; } cout<<endl; my_map.erase(a);//移除已经输出过的字符 } } }