1. 题意
给定二进制串,你可以执行下面的操作任意次,求能取得的最大值。
- 00->10
- 10->01
leetcode1702–修改后的最大二进制数
2. 题解
找到第一个0的位置,其后面的0都可以通过变换(2)与 1 1 1交换而都位于前面。再对其进行变换(1)。
- 我的
class Solution {
public:string maximumBinaryString(string binary) {string ans;int p = 0;int sz = binary.size();while( p < sz && binary[p] == '1')p++;int b = p;if (p == sz)return binary;int pre_z = 0;while ( p < sz && binary[p] == '0')p++, pre_z++;int suf_o = 0;for (int i = p; i < sz; ++i) {if ( binary[i] == '1')suf_o++;elsepre_z++;}ans.append(b + pre_z - 1, '1');ans.push_back('0');ans.append(suf_o, '1');return ans;}
};
- 官解
class Solution {
public:string maximumBinaryString(string binary) {int n = binary.size();int j = 0;for (int i = 0; i < n; i++) {if (binary[i] == '0') {while (j <= i || (j < n && binary[j] == '1')) {j++;}if (j < n) {binary[j] = '1';binary[i] = '1';binary[i + 1] = '0';}}}return binary;}
};作者:力扣官方题解
链接:https://leetcode.cn/problems/maximum-binary-string-after-change/solutions/2726979/xiu-gai-hou-de-zui-da-er-jin-zhi-zi-fu-c-put3/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。