题目
思路
这道题的切入点在于题面中所给出的第二个操作。子串中所有的“10”可以变成“01”,也就是说当出现1和0交替的情况时,可以通过这种方法将0尽量移动到前面。而当多个0聚集到一起后,就可以使用第1个条件将前方的0都改为1,最后只留下一个0。还要考虑到的是如果从字符串开始位置有连续1出现,则这些1是不用移动的。所以经过这种方法初步处理过后,对应的列表会出现111.....000....11这种情况,之后使用第2条规则将中间的0化为只有一个0,这就是最终答案。在使用算法之前需要特判一下原字符串没有0的情况。
代码
class Solution:
def maximumBinaryString(self, binary: str) -> str:
dic={}
for temp in binary:
dic[temp]=dic.get(temp,0)+1
if dic.get('0')==None or dic.get('0')==1:
return binary
templist=list(binary)
n=len(binary)
#print(dic)
start=0 //记录最左侧的连续1的中止位置
for i in range(n):
if binary[i]=='0':
start=i
break
for i in range(n):
if i==start+dic['0']-1:
templist[i]='0'
else:
templist[i]='1'
return ''.join(templist)