일단 1xxxx0 가 Special Binary String 이라고 해보자.

xxxx 는 Special Binary String 이 될 수 있을까?

만약 0110 이라면 10110010,1100 으로 나누어 졋을 것이다.

1xxxx0110100 과 같은 상태로만 구성되어있어야 한다.

만약 AB 가 있다면 AB 자리를 바꾸어서 Special 이 될수 있는건 알겠다. 그렇다면 AB 의 중간 그러니깐 abc 로 나누어서 자리를 바꾸는 것도 가능하지 않을까? 왜 저렇게 큰 단위로만 바꾸어야 할까?

우리는 항상 연속된 1이 많도록 배열하는게 가장 유리하다. 즉 연속된 1이 가장많은 곳은 A, B 의 가장 앞쪽이다. 만약 가장 앞쪽에 연속된 1이 가장 많은 곳이 아니라면 special binary string 이 아니게 된다.

그렇다면 1xxxxxx0 에서 xxxxxxx 을 dfs 한게 과연 실제로 만들어 질수 있을까?

일단 xxxxxx 안에서 count 가 0으로 내려갓다가 0이 될수는 없다.

왜냐하면 주어진 문자열 s 가 special binary string 이기 때문이다.

또한 xxxxx 또한 special binary string 이 된다. 맨앞, 맨뒤에 1,0을 없앳기 때문에 실제 cnt 는 변화가 없어야 하기 때문이다.

class Solution:
    def makeLargestSpecial(self, S: str) -> str:
        res = []
        cnt = 0
        i=0
        for j, c in enumerate(S):
            cnt = cnt + 1 if c == '1' else cnt -1
            if cnt == 0:
                res.append(f"1{self.makeLargestSpecial(S[i+1:j])}0")
                i=j+1
        return "".join(sorted(res, reverse=True))