给你一个二进制字符串 binary
,它仅有 0
或者 1
组成。你可以使用下面的操作任意次对它进行修改:
- 操作 1 :如果二进制串包含子字符串
"00"
,你可以用"10"
将其替换。- 比方说,
"00010" -> "10010"
- 比方说,
- 操作 2 :如果二进制串包含子字符串
"10"
,你可以用"01"
将其替换。- 比方说,
"00010" -> "00001"
- 比方说,
请你返回执行上述操作任意次以后能得到的 最大二进制字符串 。如果二进制字符串 x
对应的十进制数字大于二进制字符串 y
对应的十进制数字,那么我们称二进制字符串 x
大于二进制字符串 y
。
示例 1:
输入:binary = "000110" 输出:"111011" 解释:一个可行的转换为: "000110" -> "000101" "000101" -> "100101" "100101" -> "110101" "110101" -> "110011" "110011" -> "111011"
示例 2:
输入:binary = "01" 输出:"01" 解释:"01" 没办法进行任何转换。
提示:
1 <= binary.length <= 105
binary
仅包含'0'
和'1'
。
实战:
解法一:
char* maximumBinaryString(char* binary) {
int n = strlen(binary);
char *s = malloc(n + 1);
strcpy(s, binary);
int j = 0;
for (int i = 0; i < n; i++) {
if (s[i] == '0') {
while (j <= i || (j < n && s[j] == '1')) {
j++;
}
if (j < n) {
s[j] = '1';
s[i] = '1';
s[i + 1] = '0';
}
}
}
return s;
}
详解:这个解法是按题目执行的,因为要最大所以要尽量使前面为1,而按照题目规律执行便是如代码所示。
解法二:
char* maximumBinaryString(char* binary) {
int len = strlen(binary), cnt0 = 0, cnt1 = 0;
for (char * c = binary; * c; ++ c)
if (* c == '0') ++ cnt0;
else if (cnt0) ++ cnt1;
if (cnt0 > 1)
memset(binary, '1', len), binary[len - cnt1 - 1] = '0';
return binary;
}int main() { char str[101]; // 假设输入的字符串长度不超过100 printf("请输入一个字符串: "); scanf("%s", str); // 读取用户输入的字符串 printf("%s",maximumBinaryString(str)); }
详解:
这个解法是采用规律进行的解答,答案必是字符串的长度减去1的个数再减一。