【查找】临近省赛,Alan邀请emoji玩起了猜数字游戏活跃一下大脑。游戏规则如下:首先Alan写下几个数字让emoji猜,当emoji猜完之后,Alan会给他一个提示(java)

临近省赛,Alan邀请emoji大佬玩起了猜数字游戏活跃一下大脑。游戏规则如下:

首先Alan写下几个数字让emoji大佬猜,当emoji大佬猜完之后,Alan会给他一个提示,这个提示包含两部分:全对的情况 和 只是数字对的情况。

  • 全对:emoji大佬猜的数字和该数字所在的位置都是正确的;
  • 只是数字对:emoji大佬猜的数字对了,但是位置不对。

现在Alan想请你计算一下,当emoji大佬猜完之后,应该给他的提示是多少。

输入格式:

输入分为两行,分别是Alan 和 emoji大佬写下的数字串。

0≤len(nums)≤106

输出格式:

输出提示的两个数,用逗号隔开。

输入样例:

2021
1022

输出样例:

2 , 2

样例说明

2    0    2    1
     ||  ||
1    0    2    2

上述样例可以看出,0,2 的数字和位置都是对的,而2,1的数字对了,但是位置不对,
所以提示应该输出 2 ,2

输入样例:

123456
653421

输出样例:

2 , 4

样例说明

1    2    3    4    5    6
          ||  ||
6    5    3    4    2    1

上述样例可以看出,3,4 的数字和位置都是对的,
而1,2,5,6的数字对了,但是位置不对,
所以提示应该输出 2 ,4

代码如下: 

import java.util.*;

public class Main {
    static int allRight = 0;
    static int numberRight = 0;

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String str1 = input.next();
        String str2 = input.next();
        Map map1=new HashMap<>();
        Map map2=new HashMap<>();
        for (int i = 0; i < str1.length(); i++) {
            int num1 = Integer.parseInt(str1.charAt(i)+"");
            int num2 = Integer.parseInt(str2.charAt(i)+"");
            if(num1 == num2)
                allRight++;
            if(!map1.containsKey(num1)){
                map1.put(num1,1);
            }else
                map1.replace(num1,map1.get(num1),map1.get(num1)+1);
            if(!map2.containsKey(num2)){
                map2.put(num2,1);
            }else
                map2.replace(num2,map2.get(num2),map2.get(num2)+1);
        }
        Map temp1;
        Map temp2;
        if(map1.size() < map2.size()){
            temp1 = map1;
            temp2 = map2;
        }

        else {
            temp1 = map2;
            temp2 = map1;
        }
        Set set1 = temp1.keySet();
        Iterator it1 = set1.iterator();
        while (it1.hasNext()){
            int num1 = it1.next();
            Set set2 = temp2.keySet();
            Iterator it2 = set2.iterator();
            while (it2.hasNext()){
                int num2 = it2.next();
                if (num1 == num2){
                    numberRight = numberRight + Math.min(map1.get(num1),map2.get(num2));
                    break;
                }
            }
        }
        System.out.println(allRight+" , "+(numberRight - allRight));
    }
}

 

你可能感兴趣的:(java,查找,java,leetcode,蓝桥杯,算法,数据结构)