题解 | 找位置

找位置

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

全部评论

相关推荐

昨天 09:57
已编辑
武汉大学 Java
点赞 评论 收藏
分享
饼子吃到撑:当我看到外企的时候,我就知道这大概率可能是真的
点赞 评论 收藏
分享
沟头学院:无关比赛不要写,这样会显着你主次不分,比赛不要撒谎,有哪些就写那些,创新创业建议删除。技能特长可以适当夸大。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务