Bootstrap

华为机试:全量和已占用字符集

题目来源

题目描述

在这里插入图片描述
在这里插入图片描述

题目解析

#include<bits/stdc++.h>

using namespace std;

std::vector<std::string> split(std::string str, char ch){
    str += ch;
    int s = 0;
    std::vector<std::string> ans;
    for (int i = 0; i < str.size(); ++i) {
        if(str[i] == ch){
            ans.emplace_back(str.substr(s, i - s));
            s = i + 1;
        }
    }
    return ans;
}

std::string process(std::string str){
    std::vector<int> countVec(256, 0);
    bool isUsed = false;
    int alpha = 0;
    std::string dig;
    for (int i = 0; i < str.size(); ++i) {
        if(isalpha(str[i])){
            alpha = str[i];
        }else if(isdigit(str[i])){
            dig.push_back(str[i]);
        }

        if(str[i] == ',' || str[i] == '@' || i == str.size() - 1){
            if(isUsed){
                countVec[alpha] -= stoi(dig);
            }else{
                countVec[alpha] = stoi(dig);
            }
            dig.clear();
            if(str[i] == '@'){
                isUsed = true;
            }
        }
    }

    std::string ans;
    for (int i = 0; i < countVec.size(); ++i) {
        if(countVec[i] != 0){
            ans.push_back((char)i);
            ans.push_back(':');
            ans.append(std::to_string(countVec[i]));
            ans.push_back(',');
        }
    }

    if(!ans.empty()){
        ans.pop_back();
    }

    return ans;
}

int main(int argc, char **argv)
{
    std::cout <<process("a:3,b:5,c:2@a:1,b:2");
}
;