题目描述
给了一个只包含0和1的字符串
现在有俩操作能选(1)把00换成10;(2)把10换成01
问怎么操作能得到最大的字符串?
f1-找规律+贪心 |
基本分析
- 为啥会有10换成01的操作?1010-1001-1101,把第一个0后面的1都挪到最后面,变成多个1+多个0+多个1的组合。然后把多个1按照(1)处理
- 以上逻辑用代码怎么实现?(1)找到第一个0的位置;(2)统计第一个0后面1的个数;(3)构造结果
代码
class Solution:
def maximumBinaryString(self, binary: str) -> str:
if not '0' in binary:
return binary
n = len(binary)
# 找到第一个0的位置
idx = binary.index('0')
# 最终结果是 '1' * (长度 - 0后面1的个数 - 1) + '0' + '1' * cnt1
# 统计第一个0后面1的个数
cnt = binary[idx:].count('1')
return '1' * (n - cnt - 1) + '0' + '1' * cnt
总结
- 不惜要写出过程,直接构造结果