这是一个祖玛游戏。

一行球放在桌面上,球被涂上了红(R)、黄(Y)、蓝(B)、绿(G)和白(W)这么几种颜色,同时你也拥有几个球。

每一次,从你拥有的球当中拿出一个,插入到当前行当中(包括最左边和最右边)。然后,如果有三个或更多的同色球挨在一起,然后就消除这几个球。一直这么做直到没有更多的球可以消除。
找到最少的需要插入的球的数量,使得所有的球都可以被删除。如果不能删除所有的球,那么就返回-1。

  • 初始的行不会拥有三个及以上的连续的同色球。
  • 行中的球的数量不会超过20,用名为"borad"的输入字符串表示。
  • 你拥有的球不会超过5个,用名为"hand"的输入字符串表示。
  • 输入字符串都非空,而且仅包含字符 ‘R’,‘Y’,‘B’,‘G’,‘W’。

点这里可以在线做题

样例 1:

输入: "WRRBBW", "RB"
输出: -1
解释: WRRBBW -> WRR[R]BBW -> WBBW -> WBB[B]W -> WW

样例 2:

输入: "WWRRBBWW", "WRBRW"
输出: 2
解释: WWRRBBWW -> WWRR[R]BBWW -> WWBBWW -> WWBB[B]WW -> WWWW -> empty

样例 3:

输入:"G", "GGGGG"
输出: 2
解释: G -> G[G] -> GG[G] -> empty

样例 4:

输入: "RBYYBBRRB", "YRBGB"
输出: 3
解释: RBYYBBRRB -> RBYY[Y]BBRRB -> RBBBRRB -> RRRB -> B -> B[B] -> BB[B] -> empty

【题解】

考点:

  • 搜索
    题解:基本思路就是搜索,c数组统计自己各类球的数量,对board进行遍历,然后j保存一段的起点,i向后移动至出现不同的球,然后对这段长度判断,根据inc判断需要几个球插入,对应的球数量减少,然后截取起点至j的区间和i至区间终点的两段拼接,继续搜索即可。
public class Solution {/*** @param board: the given board* @param hand: the balls in your hand* @return: the minimal balls you have to insert to remove all the balls on the table*/private int aux(String s, int[] c){if("".equals(s)) {return 0;}int res = 2 * s.length() + 1; for(int i = 0; i < s.length();){int j = i++;    //j保存起点while(i < s.length() && s.charAt(i) == s.charAt(j)) {i++;}int inc = 3 - i + j;  //3-(i-j) 判断消除需要几个球if(c[s.charAt(j)] >= inc){  //如果数量足够int used = inc <= 0 ? 0 : inc;    //如果inc<=0,不需要c[s.charAt(j)] -= used;    //用掉s[j]int temp = aux(s.substring(0, j) + s.substring(i), c);  //去除j至i的一段继续搜索if(temp >= 0) {res = Math.min(res, used + temp);}c[s.charAt(j)] += used;   //搜索完成后补充球的数量}}return res == 2 * s.length() + 1 ? -1 : res;}public int findMinStep(String board, String hand) {// Write your code hereint[] c = new int[128];for(char x : hand.toCharArray()){c[x]++;}return  aux(board, c);}
}

更多题解参见

百度最新面试题:祖玛游戏思路详解相关推荐

  1. 21年最新Python面试题及答案汇总详解(上)

    错过三月找工作的机会,还要错过四月的好时期吗?Python面试你做准备了吗?下面小编整理了一套2021年最新Python常见面试题目,及Python面试题目答案汇总.希望能够帮助到大家. 21年最新P ...

  2. python逢7跳过_python实现逢七拍腿小游戏的思路详解

    逢七拍腿游戏 几个小朋友在一起玩逢七拍腿的游戏,从1开始数数,当数到7的倍数或者尾号是7时,拍一下腿.现在从1数到99,假设每个人都没有错,计算一下共要拍腿几次? 第一种实现思路:通过在for循环语句 ...

  3. python拍七游戏代码_python实现逢七拍腿小游戏的思路详解

    逢七拍腿游戏 几个小朋友在一起玩逢七拍腿的游戏,从1开始数数,当数到7的倍数或者尾号是7时,拍一下腿.现在从1数到99,假设每个人都没有错,计算一下共要拍腿几次? 第一种实现思路:通过在for循环语句 ...

  4. JAVA抖音潜艇挑战_Android 实现抖音小游戏潜艇大挑战的思路详解

    <潜水艇大挑战>是抖音上的一款小游戏,以面部识别来驱动潜艇通过障碍物,最近特别火爆,相信很多人都玩过. 一时兴起自己用Android自定义View也撸了一个,发现只要有好的创意,不用高深的 ...

  5. jquery制作html小游戏,JQuery手速测试小游戏实现思路详解

    (-1)写在前面 我用的chrome49,jquery3.0,我得到过399分,信不信由你. (1)设计思路 两个p元素放在div里,每个p元素的高度和宽度都和div一样,当鼠标放在div上时,第一个 ...

  6. 百度提前批-百度智能小程序(面经详解)

    文章目录 百度提前批-百度智能小程序(面经详解) 1.定位 2.z-index .层叠 3.作用域(scope) 4.单例模式 5.原型链 6.继承(借用构造函数,寄生组合继承,缺点是什么) 7.闭包 ...

  7. 《Android游戏开发详解》一导读

    前 言 Android游戏开发详解 作为对编程知之甚少或者毫无所知的初学者,开始学习Android游戏开发,可能会觉得就像是穿越陌生的星际的旅程.有太多的事情要尝试,太多的知识要学习,令人遗憾的是,还 ...

  8. Java编程配置思路详解

    Java编程配置思路详解 SpringBoot虽然提供了很多优秀的starter帮助我们快速开发,可实际生产环境的特殊性,我们依然需要对默认整合配置做自定义操作,提高程序的可控性,虽然你配的不一定比官 ...

  9. android仿知乎按钮动效,Android仿知乎客户端关注和取消关注的按钮点击特效实现思路详解...

    先说明一下,项目代码已上传至github,不想看长篇大论的也可以先去下代码,对照代码,哪里不懂点哪里. 代码在这https://github.com/zgzczzw/ZHFollowButton 前几 ...

最新文章

  1. MATLAB应用实战系列(七十七)-基于长时间序列栅格数据的MK检验
  2. datatable导出Excel
  3. 草根版创业网站学巴菲特售时间 获天使投资
  4. mybatis批量插入(insert)和批量更新(update)
  5. 【代码审计】PHP代码审计---基础记录
  6. hadoop项目实战--ETL--(三)实现mysql表到HIVE表的全量导入与增量导入
  7. 创业阶段如何找客户_刚成立公司,怎么样找客户?
  8. day23 内置函数,匿名函数,递归
  9. keytool 错误 java.io.IOException: incorrect AVA format
  10. r720换固态硬盘后如何重装系统_联想R720重装Winddows10无法识别固态硬盘咋办
  11. viewUrl 终结者
  12. uart协议学习,从了解到入门,看这篇文章
  13. js怎么实现那种整体页面变灰色
  14. 香农编码、费诺编码、哈弗曼编码
  15. 群晖文件管理系统使用教程
  16. ‘\t‘和“\t“的区别及作用
  17. 春节消费观察:四种愉悦感,抓住女人心
  18. 全网最详细之如何安装gpu版的pytorch
  19. 案例 | 珠宝行业:多触点个性化营销,企业微信赋能线下门店导购
  20. Zero-shot-RIS

热门文章

  1. 揭秘:清末时期老北京的四大头牌名妓的悲喜人生
  2. C# - Dictionary ( 字典 )
  3. 白帽SEO是什么?与黑帽SEO有什么区别?
  4. 重启服务器后mysql表损坏 Incorrect key file for table ‘.\axxxx.MYI‘; try to repair it“,“tourl“:““,.....
  5. Gunicorn入门学习
  6. 给你两个整数,被除数 dividend 和除数 divisor。将两数相除,要求 不使用 乘法、除法和取余运算。
  7. 2016年终总结 -- 我希望今年是我最差的一年
  8. T110Balanced Binary Tree
  9. Python汉诺塔 费布拉奇数列
  10. java 开源 报表_6款常用的Java开源报表制作工具