[leetcode-299]Bulls and Cows(java)

问题描述:这里写链接内容

问题分析:这道题看起来很唬人,其实就是遍历两个字符串,看在某个位置是否相等,如果相等,就A++;如果不相等,就把secret中的字符和guess中的字符再分别存起来;然后再遍历第二遍,第二遍的遍历就是,经过处理的guess字符,会不会在经过处理的secrets的字符里面。如果在,就B++,表明只是放错了位置而已。

public class Solution {
    public String getHint(String secret, String guess) {
        char[] secrets = secret.toCharArray();
        char[] guesses = guess.toCharArray();

        HashMap<Character,Integer> maps = new HashMap<>();
        List<Character> postDealList = new LinkedList<>();

        int As = 0,Bs = 0;

        for(int i = 0;i<secrets.length;i++){
            if(secrets[i] == guesses[i])
                As++;
            else{
                if(!maps.containsKey(secrets[i]))
                    maps.put(secrets[i],0);

                maps.replace(secrets[i],maps.get(secrets[i])+1);
                postDealList.add(guesses[i]);
            }
        }
        int size = postDealList.size();
        for(int i = 0;i<size;i++){
            char guessChar = postDealList.get(i);
            if(maps.containsKey(guessChar)){
                int val = maps.get(guessChar);
                Bs++;
                if(val - 1 == 0)
                    maps.remove(guessChar);
                else
                    maps.replace(guessChar,val-1);
            }
        }
        return String.valueOf(As)+"A"+String.valueOf(Bs)+"B";
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值