本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/50768550

You are playing the following Bulls and Cows game with your friend: You write down a number and ask your friend to guess what the number is. Each time your friend makes a guess, you provide a hint that indicates how many digits in said guess match your secret number exactly in both digit and position (called "bulls") and how many digits match the secret number but locate in the wrong position (called "cows"). Your friend will use successive guesses and hints to eventually derive the secret number.

For example:

Secret number:  "1807"
Friend's guess: "7810"

Hint: 1 bull and 3 cows. (The bull is 8, the cows are 01 and 7.)

Write a function to return a hint according to the secret number and friend's guess, use A to indicate the bulls and B to indicate the cows. In the above example, your function should return "1A3B".

Please note that both secret number and friend's guess may contain duplicate digits, for example:

Secret number:  "1123"
Friend's guess: "0111"

In this case, the 1st 1 in friend's guess is a bull, the 2nd or 3rd 1 is a cow, and your function should return "1A1B".

You may assume that the secret number and your friend's guess only contain digits, and their lengths are always equal

思路:

(1)题意为给定两串数字,当中的一串数字能够看作为password,还有一串可看作为待推測的数字,将猜对了的数字(位置和数字都同样)个数记为:个数+A,将位置不正确而包括在password中的数字个数记为:个数+B。

(2)该题主要考察字符匹配问题。因为两串数字中数的个数同样,所以,对于位置同样且数字亦同样的情况。仅仅需遍历一次就能得到bull的个数;而对于位置不同且含有同样数的情况,则须要进行特殊处理以得到cow的个数。

一方面。可能某一个数在当中的某一串数中出现了多次。还有一方面,位置同样且数同样的情况也须要进行过滤。此处,创建一个Map来进行存储和过滤。当中。map的key为数串中的数,value为该数出现的次数。这样通过一次遍历就可以将数和其个数存储起来。然后再进行两次遍历,分别得到同一位置上数同样情况的个数和不同位置上数同样情况的个数,即为所求。

详情见下方代码。

(3)希望本文对你有所帮助。

谢谢。

算法代码实现例如以下:

import java.util.HashMap;
import java.util.Map; public class Bulls_and_Cows { public static void main(String[] args) {
System.err.println(getHint("1122", "1222"));
} public static String getHint(String secret, String guess) {
char[] se = secret.toCharArray();
char[] gu = guess.toCharArray(); int len = se.length;
int bull = 0;
int cow = 0; Map<Character, Integer> seHas = new HashMap<Character, Integer>();
for (int i = 0; i < len; i++) {
if (!seHas.containsKey(se[i])) {
seHas.put(se[i], 1);
} else {
seHas.put(se[i], seHas.get(se[i]) + 1);
}
} Boolean[] b = new Boolean[len];
for (int i = 0; i < len; i++) {
if (se[i] == gu[i]) {
b[i] = true;
seHas.put(gu[i], seHas.get(gu[i])-1);
cow++;
}else {
b[i] = false;
}
} for (int j = 0; j < len; j++) {
if(b[j] == false && seHas.get(gu[j])!=null && seHas.get(gu[j])>0) {
bull ++;
seHas.put(gu[j], seHas.get(gu[j])-1);
}
} return cow + "A" + bull + "B";
}
}

Leetcode_299_Bulls and Cows的更多相关文章

  1. [LeetCode] Bulls and Cows 公母牛游戏

    You are playing the following Bulls and Cows game with your friend: You write a 4-digit secret numbe ...

  2. POJ 2186 Popular Cows(Targin缩点)

    传送门 Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 31808   Accepted: 1292 ...

  3. POJ 2387 Til the Cows Come Home(最短路 Dijkstra/spfa)

    传送门 Til the Cows Come Home Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 46727   Acce ...

  4. LeetCode 299 Bulls and Cows

    Problem: You are playing the following Bulls and Cows game with your friend: You write down a number ...

  5. [Leetcode] Bulls and Cows

    You are playing the following Bulls and Cows game with your friend: You write a 4-digit secret numbe ...

  6. 【BZOJ3314】 [Usaco2013 Nov]Crowded Cows 单调队列

    第一次写单调队列太垃圾... 左右各扫一遍即可. #include <iostream> #include <cstdio> #include <cstring> ...

  7. POJ2186 Popular Cows [强连通分量|缩点]

    Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 31241   Accepted: 12691 De ...

  8. Poj2186Popular Cows

    Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 31533   Accepted: 12817 De ...

  9. [poj2182] Lost Cows (线段树)

    线段树 Description N (2 <= N <= 8,000) cows have unique brands in the range 1..N. In a spectacula ...

随机推荐

  1. 错误: su: 无法设置组: 不允许的操作

    到 /bin目录下,用ls -l 看下su文件的权限是不是rwxr-xr-x或者-rwxrwxrwx 执行这条命令chmod ug+s su

  2. luogu1315 观光公交

    题目大意 一个公交车在一条线上从1站.2站走到n站,站站间有距离.另有m个乘客在时间点t在a站等候要到b站.对于一个站,如果车比人早到,则车等人,如果人比车早到,则人等车(我一开始做题时把这个情况当作 ...

  3. luogu3111 [USACO14DEC]牛慢跑Cow Jog_Sliver

    题目大意 有N (1 <= N <= 100,000)头奶牛在一个单人的超长跑道上慢跑,每头牛的起点位置都不同.由于是单人跑道,所有他们之间不能相互超越.当一头速度快的奶牛追上另外一头奶牛 ...

  4. raspberry-同路由器用putty和vnc桌面登录方法

    一个raspberry B,家里电脑是win10系统. 最初是用HDMI连家里电视机的显示屏来当桌面的,没有配置就好用,但第二次再开机发现怎么弄都显示无信号,排除SD卡不活动.HDMI接口被烧坏等可能 ...

  5. redis配置文件参数详解

    配置文件参数说明: 1. Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程 daemonize no 2. 当Redis以守护进程方式运行时,Redis默认会把pi ...

  6. [HTML] 条件注释判断浏览器

    <!--[if !IE]><!--> 除IE外都可识别 <!--<![endif]--><!--[if IE]> 所有的IE可识别 <![e ...

  7. html/css常用合集

    1. 消除inline-block元素间的换行间隙问题: {font-size:0;} 兼容IE6/7浏览器的方法:letter-spacing属性.   2.让两个inline-block的div顶 ...

  8. cookie,session,viewstate

    viewstate的原理是隐藏域. protected void Page_Load(object sender, EventArgs e) { ViewState["v1"] = ...

  9. winfrom窗体属性

  10. Unity3d Time

    using UnityEngine; using System.Collections; public class test1 : MonoBehaviour { public float angle ...