题解 | 找位置

找位置

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);//移除已经输出过的字符
        }
    }
}

全部评论

相关推荐

03-24 16:56
已编辑
肇庆学院 后端
一天代码十万三:你看看人家进大厂的简历就知道了,你这个学历得acm+大厂实习+熟悉底层+运气很好 才有可能进某个大厂,因为大部分是直接卡学历的
投递快手等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务