题目地址:

https://leetcode.com/problems/string-without-aaa-or-bbb/

给定两个数xxx和yyy,都是非负整数,要求返回任意一个字符串,其含xxx个a与y与y与y个b,并且其不含aaa或者bbb作为其子串。题目保证有解。

思路是,开一个数组sss,先将次数多的那个字母填满sss,不妨设x≥yx\ge yx≥y,那就用a将sss填满,然后考虑将其中的a替换为b。我们考虑从s[2]s[2]s[2]开始,每隔333这个长度就填b,这样能尽量达到不存在aaa的效果。如果b没用完,那就再从s[1]s[1]s[1]开始,也是每隔333这个长度就填b,用完为止。

算法正确性证明:
首先,按上面方法得到的字符串一定是合法的。如果第一遍填b用完了,但仍然存在aaa这个子串(显然bbb是不会存在的。如果仍然不合法,那只能说明存在aaa),那这个aaa一定存在于末尾,此时由鸽笼原理,无论怎么排都必须存在aaa,与题目保证有解矛盾;如果第一遍填b用完了并且合法,那问题已经解决;如果第一遍填b用完了,但第二遍填b没用完,那就说明b的数量更多,这与上面方法的假设矛盾;如果第二遍用完了,则一定得到合法解。所以算法正确。

代码如下:

import java.util.Arrays;public class Solution {public String strWithout3a3b(int A, int B) {char[] str = new char[A + B];char c1 = 'a', c2 = 'b';if (A < B) {c1 = 'b';c2 = 'a';int in = A;A = B;B = in;}Arrays.fill(str, c1);for (int i = 2; i < str.length; i += 3) {if (B > 0) {str[i] = c2;B--;}}// 如果第一遍填写B用完了,则直接返回答案if (B == 0) {return new String(str);}for (int i = 1; i < str.length; i += 3) {if (B > 0) {str[i] = c2;B--;}}return new String(str);}
}

时空复杂度O(x+y)O(x+y)O(x+y)。

【Leetcode】984. String Without AAA or BBB(配数学证明)相关推荐

  1. LeetCode 984. 不含 AAA 或 BBB 的字符串(贪心)

    1. 题目 给定两个整数 A 和 B,返回任意字符串 S,要求满足: S 的长度为 A + B,且正好包含 A 个 'a' 字母与 B 个 'b' 字母: 子串 'aaa' 没有出现在 S 中: 子串 ...

  2. 【Leetcode】1526. Minimum Number of Increments on Subarrays to Form a Target Array(配数学证明)

    题目地址: https://leetcode.com/problems/minimum-number-of-increments-on-subarrays-to-form-a-target-array ...

  3. 【CodeForces】CF13C Sequence(配数学证明)

    题目地址: https://www.luogu.com.cn/problem/CF13C 题面翻译: 给定一个序列,每次操作可以把某个数加111或者减111.要求把序列变成非降数列.而且要求修改后的数 ...

  4. 【洛谷】P2708 硬币翻转(配数学证明)

    题目地址: https://www.luogu.com.cn/problem/P2708 题目描述: 有很多个硬币摆在一行,有正面朝上的,也有背面朝上的.正面朝上的用111表示,背面朝上的用000表示 ...

  5. 【洛谷】P1150 Peter的烟(配数学证明)

    题目地址: https://www.luogu.com.cn/problem/P1150 题目描述: Peter有nnn根烟,他每吸完一根烟就把烟蒂保存起来,kkk(k>1k>1k> ...

  6. 【ACWing】2135. 马步距离(配数学证明)

    题目地址: https://www.acwing.com/problem/content/description/2137/ 在国际象棋和中国象棋中,马的移动规则相同,都是走"日" ...

  7. 不含 AAA 或 BBB 的字符串

    给定一个整数数组 A,对于每个整数 A[i],我们可以选择 x = -K 或是 x = K,并将 x 加到 A[i] 中. 在此过程之后,我们得到一些数组 B. 返回 B 的最大值和 B 的最小值之间 ...

  8. 【细节实现题】LeetCode 8. String to Integer (atoi)

    LeetCode 8. String to Integer (atoi) Solution1:我的答案 参考链接:http://www.cnblogs.com/grandyang/p/4125537. ...

  9. LeetCode 8. String to Integer (atoi)(字符串)

    LeetCode 8. String to Integer (atoi)(字符串) LeetCode 8 String to Integer atoi字符串 问题描述 解题思路 参考代码 By Sca ...

最新文章

  1. centos 6.3 安装reids
  2. HTML5中常用的标签(及标签的属性和作用)
  3. MapReduce基础开发之十三FileSystem实现本地文件上传
  4. DFT - Introduction to Test Models
  5. 1030 Travel Plan (30 分) 【难度: 中 / 知识点: 最短路】
  6. 启动器和选择器学习-----(5)启动器
  7. 1625 宝石项链 大视野评测
  8. app mvc框架_Google App Engine上的Spring MVC和REST
  9. 《奇点来临》——阿西莫夫三大定律
  10. U盘的针脚板竟然掉了
  11. php录音功能,h5做出网页录音功能
  12. Python的函数使用
  13. Pentaho RestAPI用户角色管理
  14. 计算机教室如何防火,校园防火及火灾逃生自救安全常识
  15. Emitter使用方法
  16. 什么是CDN?CDN和DNS有哪些关系和区别?
  17. linux系统配置交换机指令,【001】H3C交换机命令使用介绍
  18. LORA1276/1278 CAD检测功能测试
  19. DNSPod十问黄欢:为什么互联网大厂都要去造车?
  20. iPhone 双卡双待时代即将来临?

热门文章

  1. 邮件信封背景设计模板素材推荐 精品 小众
  2. 【小游戏】跑酷(带天赋)
  3. 电烤盘的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  4. 智能婴儿床市场现状研究与发展前景预测分析
  5. mapStruct——VO-DO工具
  6. 做软件,中国人不比别人差 专访微软中国研究院院长:张亚勤 (转)
  7. QoS服务质量四QoS边界行为之流量监管
  8. 【腾讯TMQ】【AI专栏】语音合成系统评测介绍
  9. w1区块链基础知识25讲
  10. UPS市场排名“第一”泛滥 三点绝招巧识猫腻