1. 题意
给定二进制串,你可以执行下面的操作任意次,求能取得的最大值。
- 00->10
- 10->01
2. 题解
找到第一个0的位置,其后面的0都可以通过变换(2)与 1 1 1交换而都位于前面。再对其进行变换(1)。
- 我的
cpp
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++;
else
pre_z++;
}
ans.append(b + pre_z - 1, '1');
ans.push_back('0');
ans.append(suf_o, '1');
return ans;
}
};
- 官解
cpp
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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。