string的一个小特性


贴一下今天一日一题的题目:

299. 猜数字游戏 - 力扣(LeetCode) (leetcode-cn.com)

今天写一日一题的时候,思路异常简单。

思路解释:

先一次循环,将bull的值给确定,后来就是将两个string放进hash表里面就可以了,然后find函数,找到了就res++,最后将res转换成string类型,然后加入到ans即可。

但是有string的变量加入string数组的时候,我采用的是

#include 

using namespace std ;

int main()
{
    string a ; 
    int num = 456 ; 
    string res = to_string(num) ;
    a.push_back(res) ; 
    cout << a << endl ;
    return  0 ; 
}

小细节:

好吧,这样是不行的,将a.push_back(res) ,应该将a += res ;

算了,写都写了,贴个代码吧:

我一开始是用hash table来进行find的,最后只击败5%的人,原始代码如下:

class Solution {
public:
    string getHint(string secret, string guess) {
        int n = secret.size() ; 
        string ans = "" ; 
        multiset ha1 , ha2 ;   
        int res = 0 ; 
        for(int i = 0; i < n ; ++ i)
        {
            if(secret[i] == guess[i])
            {
                res ++ ;
                secret[i] = guess[i] = -1 ; 
            }
        }
        string num = to_string(res) ;  
        ans+=num ; 
        ans.push_back('A') ;

        for(int i = 0 ; i < n ; ++ i)
        {
            if(secret[i] != -1 && guess[i] != -1)
            {
                ha1.insert(secret[i]) ;
                ha2.insert(guess[i]) ;  
            }
        } 
        int cnt = 0  ;
        for(char c : ha1)
        {
            auto it = ha2.find(c) ; 
            if(it != ha2.end())
            {
                cnt ++ ; 
                ha2.erase(it)  ;     
            }
        }
 
        string cn = to_string(cnt) ; 
        ans+=cn ;
        ans.push_back('B') ;

        return ans ; 
    }
};

后来看到大佬是可以直接用数组来优化的,学习了.

class Solution {
public:
    string getHint(string secret, string guess) {
        int n = secret.size();
        int A = 0;
        int B = 0;
        
        int CA[10];
        int CB[10];
        memset(CA, 0, sizeof(CA));
        memset(CB, 0, sizeof(CB));

        for (int i = 0; i < n; i++) {
            if (secret[i] == guess[i]) A++;
            CA[secret[i] - '0']++;
            CB[guess[i] - '0']++;
        }

        for (int i = 0; i < 10; i++) {
            B += min(CA[i], CB[i]);
        }
        B -= A;

        string ans = "";
        ans = to_string(A) + "A" + to_string(B) + "B";

        return ans;
    }
};

就是mark一下,一个小细节而已,虽然不起眼,但是有时候确实能把你卡死。

最近在学新东西,下次在更,拜拜。


文章作者: 罗林
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 罗林 !
  目录