299.[leetcode]Bulls and Cows

来源:互联网 发布:mac page up 编辑:程序博客网 时间:2024/05/21 13:57

题意就不赘述

我的做法

class Solution {public:    string getHint(string secret, string guess) {        vector<char> _guess;        multiset<char> _secret;        multiset<char>::iterator it;        ostringstream b,c;        int length = secret.size();        int bulls = 0;        int cows = 0;        // count bulls        for(int i=0; i<length;i++){            if(secret[i]!=guess[i]) {                _secret.insert(secret[i]);                _guess.push_back(guess[i]);            } else {                bulls++;            }        }        // count cows        for(int i=0; i<_guess.size();i++){            it = _secret.find(_guess[i]);            if(it != _secret.end()) {                cows++;                _secret.erase(it);            }         }        // 输出部分 sstream        string result,bulls_num,cows_num;        b << bulls;        bulls_num = b.str();        c << cows;        cows_num = c.str();        result = bulls_num + "A" + cows_num + "B";        return result;    }};

大神做法

string getHint(string secret, string guess) {        vector<int>tb_guess(10),tb_secret(10);        int A=0,B=0;        for (int i=0;i<secret.size();++i){            if (secret[i]==guess[i]) A++;            else {                tb_guess[guess[i]-'0']++;                tb_secret[secret[i]-'0']++;            }        }        for (int i=0;i<10;++i){            B=B+ min(tb_guess[i],tb_secret[i]);        }        return to_string(A)+'A'+to_string(B)+'B';    }

关键在这个,题中有一个重要的信息是:只可能是数字, 也就是只可能是 0-9

这时只要用两个10大小的 vector 记录下,不同的数字出现的次数,去两者最小(也就是重叠的部分),就好了

ps:使用std 的 to_string 也比 sstream好的多

0 0