算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !

今天和大家聊的问题叫做 祖玛游戏,我们先来看题面:

https://leetcode-cn.com/problems/zuma-game/

示例

示例 1:输入:board = "WRRBBW", hand = "RB"
输出:-1
解释:无法移除桌面上的所有球。可以得到的最好局面是:
- 插入一个 'R' ,使桌面变为 WRRRBBW 。WRRRBBW -> WBBW
- 插入一个 'B' ,使桌面变为 WBBBW 。WBBBW -> WW
桌面上还剩着球,没有其他球可以插入。示例 2:输入:board = "WWRRBBWW", hand = "WRBRW"
输出:2
解释:要想清空桌面上的球,可以按下述步骤:
- 插入一个 'R' ,使桌面变为 WWRRRBBWW 。WWRRRBBWW -> WWBBWW
- 插入一个 'B' ,使桌面变为 WWBBBWW 。WWBBBWW -> WWWW -> empty
只需从手中出 2 个球就可以清空桌面。示例 3:输入:board = "G", hand = "GGGGG"
输出:2
解释:要想清空桌面上的球,可以按下述步骤:
- 插入一个 'G' ,使桌面变为 GG 。
- 插入一个 'G' ,使桌面变为 GGG 。GGG -> empty
只需从手中出 2 个球就可以清空桌面。示例 4:输入:board = "RBYYBBRRB", hand = "YRBGB"
输出:3
解释:要想清空桌面上的球,可以按下述步骤:
- 插入一个 'Y' ,使桌面变为 RBYYYBBRRB 。RBYYYBBRRB -> RBBBRRB -> RRRB -> B
- 插入一个 'B' ,使桌面变为 BB 。
- 插入一个 'B' ,使桌面变为 BBB 。BBB -> empty
只需从手中出 3 个球就可以清空桌面。

解题

https://www.acwing.com/solution/leetcode/content/2588/

我们先将手中的球用哈希表来存储一下,然后看桌上的球能否在哈希表里的球添加后消除,然后消除后递归处理剩下的。中间记录需要的球数,用来更新需要球数的最小值。如果最小值超出了手中球的个数,则无法消除。

时间复杂度分析:桌上的球不会超过20个,手中的球不会超过5个,所以时间复杂度为O(m+n).

class Solution {
public:string del(string board){for(int i=0;i<board.size();){int j=i;while(j<board.size()&&board[i]==board[j])j++;if(j-i>=3)return del(board.substr(0,i)+board.substr(j));else i=j;}return board;}int dfs(string board, unordered_map<char,int>&hash){board=del(board);if(board.size()==0)return 0;int rs=6,need=0;for(int i=0;i<board.size();){int j=i;while(j<board.size()&&board[i]==board[j])j++;need=3-(j-i);if(hash[board[i]]>=need){hash[board[i]]-=need;rs=min(rs,need+dfs(board.substr(0,i)+board.substr(j),hash));hash[board[i]]+=need;}i=j;}return rs;}int findMinStep(string board, string hand) {unordered_map<char,int>hash;for(auto x:hand)hash[x]++;int res=dfs(board,hash);return res==6?-1:res;}
};

好了,今天的文章就到这里,如果觉得有所收获,请顺手点个在看或者转发吧,你们的支持是我最大的动力 。

上期推文:

LeetCode1-480题汇总,希望对你有点帮助!

LeetCode刷题实战481:神奇字符串

LeetCode刷题实战482:密钥格式化

LeetCode刷题实战483:最小好进制

LeetCode刷题实战484:寻找排列

LeetCode刷题实战485:最大连续 1 的个数

LeetCode刷题实战486:预测赢家

LeetCode刷题实战487:最大连续1的个数 II

​LeetCode刷题实战488:祖玛游戏相关推荐

  1. ​LeetCode刷题实战517:超级洗衣机

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  2. ​LeetCode刷题实战535:TinyURL 的加密与解密

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  3. ​LeetCode刷题实战174:地下城游戏

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  4. ​LeetCode刷题实战375:猜数字大小 II

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  5. ​LeetCode刷题实战179:最大数

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  6. ​LeetCode刷题实战181: 超过经理收入的员工

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  7. ​LeetCode刷题实战50:Pow(x, n)

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  8. ​LeetCode刷题实战391:完美矩形

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

  9. ​LeetCode刷题实战603:连续空余座位

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 ! 今天和大家 ...

最新文章

  1. Survey | 深度学习方法在生物网络中的应用
  2. 情感分析——深入snownlp原理和实践
  3. numpy np.matmul()(两个数组的矩阵乘积)
  4. xgboost模型参数详解
  5. 关于地图添加大量marker点进行卡顿问题
  6. 和 的运算(值)结果 及 Boolean结果
  7. start() 跟 run() 方法的区别和联系
  8. JavaScript 数组 API 全解析
  9. 第二阶段团队绩效考核报告
  10. word总页数不包含封面_6个实用的word模板,让你快速制作表格和目录
  11. mysql date max_mysql – 每个ID的SELECT MAX DATE
  12. 2017中国HPC TOP100:AI成最大赢家,浪潮和老黄都笑了
  13. numpy——zeros(), ones(), empty(), eye()
  14. java runtime 清屏_【图片】请问java编写中如何做到清屏啊。。。_java吧_百度贴吧...
  15. ios苹果应用ipa一键签名工具_ios签名何以做到不越狱不上架也能安装ipa文件?
  16. java 调用 cplex
  17. [转载]使用 Abbot 框架自动化测试 Eclipse 插件的用户界面,第 2 部分
  18. iPhone媒体服务器修改,出现Apple媒体服务条款与条件已更改是怎么回事如何解决...
  19. 晶圆检测显微镜是做什么研究才用到的?
  20. python中如何保存并使用训练好的模型并调用

热门文章

  1. [音乐欣赏]花与琴的流星
  2. initial commit
  3. 深度学习笔记(6)BatchNorm批量标准化
  4. Mac壁纸精灵Wallpaper Wizard如何保存我喜欢的图片?
  5. k1658停运_武汉局集团公司近期临时停运列车的公告
  6. Android FaceBook登录 分享获取HashKey(密钥散列)的简单方法
  7. metabase table 类型entity_type 识别
  8. [300iq Contest 1]简要题解
  9. mysql后门_运用Mysql语句生成后门具体办法
  10. 小米路由器 使用chrome打不开网页