文章目录

  • 1. 题目
  • 2. 解题

1. 题目

给你一个二进制字符串 s ,现需要将其转化为一个 交替字符串 。
请你计算并返回转化所需的 最小 字符交换次数,如果无法完成转化,返回 -1 。

交替字符串 是指:相邻字符之间不存在相等情况的字符串。例如,字符串 "010""1010" 属于交替字符串,但 "0100" 不是。

任意两个字符都可以进行交换,不必相邻 。

示例 1:
输入:s = "111000"
输出:1
解释:交换位置 1 和 4:"111000" -> "101010" ,字符串变为交替字符串。示例 2:
输入:s = "010"
输出:0
解释:字符串已经是交替字符串了,不需要交换。示例 3:
输入:s = "1110"
输出:-1提示:
1 <= s.length <= 1000
s[i] 的值为 '0' 或 '1'

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-number-of-swaps-to-make-the-binary-string-alternating
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 0, 1 的个数差不能超过 1 个
  • 个数相等的话,最终的字符串 不是 0 开头就是 1 开头
  • 不相等的话,多的数字开头
  • 依次比较,不相同的位置就是需要调整的
class Solution {public:int minSwaps(string s) {int one = 0, zero = 0, n = s.size();for(auto c : s){if(c == '1') one++;else zero++;}if(abs(one-zero) > 1) return -1; // 不满足int a = 0, b = 0;if(one == zero){for(int i = 0; i < s.size(); ++i){if((i&1) && s[i]=='1') a++;else if((i&1)==0 && s[i]=='1') b++;}return min(n/2-a, n/2-b);//需要把所有奇数位的1换掉,或者所有偶数位的1换掉}else if(one > zero) // 1 多,1开头{for(int i = 0; i < s.size(); i += 2){if(s[i] == '0') a++;}return a;}else{for(int i = 0; i < s.size(); i += 2){if(s[i] == '1') a++;}return a;}}
};

4 ms 6.4 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 1864. 构成交替字符串需要的最小交换次数相关推荐

  1. Leetcode1963. 使字符串平衡的最小交换次数[C++题解]:贪心

    文章目录 题目 题解 题目 题目来源:https://leetcode-cn.com/problems/minimum-number-of-swaps-to-make-the-string-balan ...

  2. leetcode算法题--使序列递增的最小交换次数★

    原题链接:https://leetcode-cn.com/problems/minimum-swaps-to-make-sequences-increasing/ 动态规划 dp[0]表示若当前位置不 ...

  3. LeetCode 801. 使序列递增的最小交换次数(动态规划)

    1. 题目 我们有两个长度相等且不为空的整型数组 A 和 B . 我们可以交换 A[i] 和 B[i] 的元素.注意这两个元素在各自的序列中应该处于相同的位置. 在交换过一些元素之后,数组 A 和 B ...

  4. leetcode - 801. 使序列递增的最小交换次数

    解题思路:使用两个状态量来存储信息: swap[i]表示交换A和B中第i个数字,A和B中前i个数字达到严格递增所需要的最小交换次数. keep[i]表示不交换A和B中第i个数字,A和B中前i个数字达到 ...

  5. Java实现 LeetCode 801 使序列递增的最小交换次数 (DP)

    801. 使序列递增的最小交换次数 我们有两个长度相等且不为空的整型数组 A 和 B . 我们可以交换 A[i] 和 B[i] 的元素.注意这两个元素在各自的序列中应该处于相同的位置. 在交换过一些元 ...

  6. LeetCode 1647. 字符频次唯一的最小删除次数(贪心)

    文章目录 1. 题目 2. 解题 1. 题目 如果字符串 s 中 不存在 两个不同字符 频次 相同的情况,就称 s 是 优质字符串 . 给你一个字符串 s,返回使 s 成为 优质字符串 需要删除的 最 ...

  7. LeetCode 1536. 排布二进制网格的最少交换次数

    文章目录 1. 题目 2. 解题 1. 题目 给你一个 n x n 的二进制网格 grid,每一次操作中,你可以选择网格的 相邻两行 进行交换. 一个符合要求的网格需要满足主对角线以上的格子全部都是 ...

  8. C++描述 LeetCode 5676. 生成交替二进制字符串的最少操作数

    C++描述 LeetCode 5676. 生成交替二进制字符串的最少操作数   大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博主目前仅在C ...

  9. LeetCode 1758. 生成交替二进制字符串的最少操作数(DP)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个仅由字符 '0' 和 '1' 组成的字符串 s . 一步操作中,你可以将任一 '0' 变成 '1' ,或者将 '1' 变成 '0' . 交替字符串 ...

最新文章

  1. MSB3721 命令““C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin\nvcc.exe“ 已退出 返回代码为1
  2. 写给师弟师妹的一封信-论在校程序员的学习方向
  3. arm ffmpeg报错:Invalid data found when processing input(没解决)(在ubuntu上能正常运行)(重新交叉编译后问题解决)
  4. ASP.NET Core微服务(三)——【跨域配置】
  5. SAP SD里CDS view对status的设计
  6. 怎么在anaconda上安装python_我是如何用Anaconda来管理Python的
  7. https://www.cnblogs.com/jingmoxukong/p/7755643.html
  8. 新能源界首陷“漏电门”奥迪将召回1644辆电动车e-tron
  9. 支付宝H5支付,ISV权限不足
  10. 京东宙斯php,京东联盟API申请
  11. matlab 阻尼牛顿法
  12. 蘑菇街商家登录php源码,蘑菇街
  13. 解决面部毛孔粗大的7个小窍门 - 健康程序员,至尚生活!
  14. Web前端——JavaScript 的基础总结
  15. KVM 虚拟化技术性能调优实战
  16. animejs走马灯_web前端攻城狮超爱的JS动画库插件—anime.js
  17. Python 下opencv 应用: 摄像头参数设置
  18. Spring-配置数据源
  19. CI服务器-Hudson持续集成服务器的安装配置与使用
  20. 75个最佳网络安全工具

热门文章

  1. 大学计算机应用基础考试题库,大学计算机应用基础考试题库
  2. java mapstring_ object 遍历_ListMapString,Object使用Java代码遍历以获取String,Object的值...
  3. Python 快速入门
  4. Codeblocks和gdb调试 (转)
  5. 湖北大学计算机袁云,暑期走访不停歇 远赴异地送关怀——学校慰问离退休教职工和校友...
  6. 凡人修仙传显示无法连接服务器,《凡人修仙传》网络异常及橙色BOSS补偿说明...
  7. 字符设备驱动基础篇1——简单的驱动源码分析
  8. 自动部署war包脚本
  9. Python代码这样写更优雅(转)
  10. Chrome 扩展 最近的历史 HistoryBar v1.1