首页 > 编程语言 >#yyds干货盘点# LeetCode程序员面试金典:珠玑妙算

#yyds干货盘点# LeetCode程序员面试金典:珠玑妙算

时间:2023-02-28 18:03:11浏览次数:39  
标签:yyds guess 字符 int 金典 solution 次数 猜中 LeetCode

题目:

珠玑妙算游戏(the game of master mind)的玩法如下。

计算机有4个槽,每个槽放一个球,颜色可能是红色(R)、黄色(Y)、绿色(G)或蓝色(B)。例如,计算机可能有RGGB 4种(槽1为红色,槽2、3为绿色,槽4为蓝色)。作为用户,你试图猜出颜色组合。打个比方,你可能会猜YRGB。要是猜对某个槽的颜色,则算一次“猜中”;要是只猜对颜色但槽位猜错了,则算一次“伪猜中”。注意,“猜中”不能算入“伪猜中”。

给定一种颜色组合solution和一个猜测guess,编写一个方法,返回猜中和伪猜中的次数answer,其中answer[0]为猜中的次数,answer[1]为伪猜中的次数。

示例:

输入: solution="RGBY",guess="GGRR"

输出: [1,1]

解释: 猜中1次,伪猜中1次。

代码实现:

class Solution {
public int[] masterMind(String solution, String guess) {
//记录“猜中”和“伪猜中”的次数
int[] ans = new int[2];
//记录不是“猜中”字符出现的次数
Map<Character,Integer> map = new HashMap<>();
for(int i = 0;i < 4;i++){
//记录“猜中”的次数
if(solution.charAt(i) == guess.charAt(i)) ans[0]++;
else{
char c1 = solution.charAt(i);
char c2 = guess.charAt(i);
//获取没有匹配字符出现的次数
int val = map.getOrDefault(c1,0);
int val1 = map.getOrDefault(c2,0);
//val < 0 表示 guess 之前有一个字符可以与现在 solution 字符组成伪猜中
if(val < 0){
ans[1]++;
}
//更改字符c1出现的次数
map.put(c1,val + 1);
// val1 > 0 表示 solution 之前有一个字符可以与现在 guess 字符组成伪猜中
if(val1 > 0){
ans[1]++;
}
//更改字符c2出现的次数
map.put(c2,val1 - 1);
}
}
return ans;
}
}

标签:yyds,guess,字符,int,金典,solution,次数,猜中,LeetCode
From: https://blog.51cto.com/u_13321676/6091659

相关文章

  • #yyds干货盘点# LeetCode程序员面试金典:部分排序
    题目:给定一个整数数组,编写一个函数,找出索引m和n,只要将索引区间[m,n]的元素排好序,整个数组就是有序的。注意:n-m尽量最小,也就是说,找出符合条件的最短序列。函数返回值为[m,n],......
  • #yyds干货盘点# LeetCode面试题:搜索旋转排序数组
    1.简述:整数数组nums按升序排列,数组中的值互不相同。在传递给函数之前,nums在预先未知的某个下标k(0<=k<nums.length)上进行了旋转,使数组变为[nums[k],nums[k+1],......
  • #yyds干货盘点# LeetCode面试题:在排序数组中查找元素的第一个和最后一个位置
    1.简述:给你一个按照非递减顺序排列的整数数组nums,和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target,返回 [-1,-1]......
  • 【扫描线】LeetCode 253. 会议室 II
    题目链接253.会议室II思路这道题非常类似于坐公交车上下车。样例中intervals=[[0,30],[5,10],[15,20]]可以这么拆解上车:[0,+1],[5,+1],[15,+1]下车:[10,-......
  • 【栈】LeetCode 856. 括号的分数
    题目链接856.括号的分数思路我们通过观察发现,()是唯一贡献分数的结构,外括号只是为该结构添加了一些乘数。所以我们只需要关心()。我们用ddd维护当前括号的深度,对......
  • 【DFS】LeetCode 22. 括号生成
    题目链接22.括号生成思路使用DFS和贪心的思想,如果左括号的数量不够就优先放置左括号,然后再放置右括号。代码classSolution{privateList<String>result=......
  • leetcode之——二分法模板
    classSolution:defsearch(self,nums:List[int],target:int)->int:n=len(nums)left,right=0,n-1whileleft<=right:k=(right-left)//2+left......
  • LeetCode算法训练-回溯 491.递增子序列 46.全排列 47.全排列 II
    欢迎关注个人公众号:爱喝可可牛奶LeetCode算法训练-回溯491.递增子序列46.全排列47.全排列IILeetCode491.递增子序列分析找出并返回所有数组中不同的递增子序列......
  • #yyds干货盘点 react笔记之引入FontAwesome
    前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从......
  • LeetCode/2.两数相加
    给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和......