题解 | 找位置
找位置
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);//移除已经输出过的字符
}
}
}
查看20道真题和解析