2019年9月24日 星期二

[Easy] 299. Bulls and Cows

傳入純數字的密碼字串與猜測字串,位置與數字相同是A,位置不同但數字相同則是B。

Discuss 1ms寫法

    public String getHint(String secret, String guess) {
        int a = 0;
        int b = 0;
        int[] m1 = new int[10];
        int[] m2 = new int[10];
        for (int i = 0; i < secret.length(); i++) {
            if (secret.charAt(i) == guess.charAt(i)) 
                a++;
            else {
                m1[secret.charAt(i) - '0']++;
                m2[guess.charAt(i) - '0']++;
            }
        }
        for (int i = 0; i < 10; i++) 
            b += Math.min(m1[i], m2[i]);
        
        return a + "A" + b + "B";        
    }

自己 2ms寫法

    public String getHint(String secret, String guess) {
        int acount = 0,bcount = 0;
        int gca[] = new int[10];
        StringBuilder sb = new StringBuilder(secret);
        for(int i=0;i<secret.length();i++){
            char sc = secret.charAt(i);
            char gc = guess.charAt(i);
            if(sc==gc){
                acount++;
                sb.replace(i,i+1,"a");
            }
            else
                gca[gc-'0']++;
        }
        for(int i=0;i<sb.length();i++){
            char c = sb.charAt(i);            
            if(c>='0'&&c<='9'&&gca[c-'0']-->0)
                bcount++;            
        }
        
        return acount+"A"+bcount+"B";        
        
    }


沒有留言:

張貼留言