【leetcode】299.(Medium)Bulls and Cows

思路

bulls很好算,过一遍两个数组找对应的即可

cows的话,首先如果一个坐标的数字已经算作bull的话就不能再算作cow,用isBull[]数组将所有的bull坐标记录下来,算cow的时候就不用管这些坐标的数字。
然后记录一下cows的数字都有哪些,每个数字都出现了多少次,用mapSecret保存下来。然后再算一下guess中的数字。

提交代码:
class Solution {
    public String getHint(String secret, String guess) {
    	int bulls=0,cows=0,len=secret.length();
    	Map<Character,Integer> mapSecret=new HashMap<>();
    	Map<Character,Integer> mapGuess=new HashMap<>();
    	boolean[] isBull=new boolean[len];
    	char c1,c2;
    	for(int i=0;i<len;i++) {
    		c1=secret.charAt(i);
    		c2=guess.charAt(i);
    		if(c1==c2) {
    			bulls++;
    			isBull[i]=true;
    		}else {
    			if(!mapSecret.containsKey(c1))
    				mapSecret.put(c1, 1);
    			else
    				mapSecret.put(c1,mapSecret.get(c1)+1);
    		}
    	}
    	
    	for(int i=0;i<len;i++) {
    		if(!isBull[i]) {
    			c2=guess.charAt(i);
    			if(mapSecret.containsKey(c2)) {
    				if(mapGuess.containsKey(c2))
    					mapGuess.put(c2,Math.min(mapSecret.get(c2), mapGuess.get(c2)+1));
    				else 
    					mapGuess.put(c2,1);
    			}
    		}
    	}
    	for(Integer value : mapGuess.values())
    		cows+=value;
    	
    	return Integer.toString(bulls)+"A"+Integer.toString(cows)+"B";
    }
}

运行结果

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值