leetcode 5760. 构成交替字符串需要的最小交换次数(C++)
2021/5/16 20:26:45
本文主要是介绍leetcode 5760. 构成交替字符串需要的最小交换次数(C++),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
给你一个二进制字符串 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'
C++
class Solution { public: int minSwaps(string s) { int res=s.size(); int n=s.size(); int num_zero=0; int num_one=0; for(int i=0;i<n;i++) { if(s[i]=='0') { num_zero++; } else { num_one++; } } if(abs(num_zero-num_one)>1) { return -1; } if(num_zero>=num_one) { int r1=0; for(int i=0;i<n;i++) { if((i%2==0 && s[i]!='0') || (i%2==1 && s[i]!='1')) { r1++; } } res=min(res,r1/2); } if(num_zero<=num_one) { int r1=0; for(int i=0;i<n;i++) { if((i%2==0 && s[i]!='1') || (i%2==1 && s[i]!='0')) { r1++; } } res=min(res,r1/2); } return res; } };
这篇关于leetcode 5760. 构成交替字符串需要的最小交换次数(C++)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-28pyqt 怎么打包整个项目-icode9专业技术文章分享
- 2024-09-28laravel Commands 创建带有参数的 Artisan 命令的步骤和示例-icode9专业技术文章分享
- 2024-09-28antd怎么实现渲染tiff图片-icode9专业技术文章分享
- 2024-09-28英文半角中划线和中文全角的中划线有什么区别-icode9专业技术文章分享
- 2024-09-28nvm npm 和node 他们之间有什么关系-icode9专业技术文章分享
- 2024-09-28Node Version Manager (nvm)使用教程-icode9专业技术文章分享
- 2024-09-28nvm命令太慢,是什么原因-icode9专业技术文章分享
- 2024-09-28Kotlin 如何增加、删除和修改 MutableStateFlow 中的值。-icode9专业技术文章分享
- 2024-09-28Kotlin的stateFlow.update 写法介绍-icode9专业技术文章分享
- 2024-09-28kotlin 怎么获取当前时间格式-icode9专业技术文章分享