old_contents: # Time:  f(n) = kf(n/k) + n/k * klogk <= O(logn * nlogk) <= O(n^2)
  #        n is the length of S, k is the max number of special strings in each depth
  # Space: O(n)
      
  class Solution(object):
      def makeLargestSpecial(self, S):
          """
          :type S: str
          :rtype: str
          """
          result = []
          j = count = 0
          for i, v in enumerate(S):
              count += 1 if v == '1' else -1
              if count == 0:
                  result.append("1{}0".format(self.makeLargestSpecial(S[j+1:i])))
                  j = i+1
          result.sort(reverse = True)
          return "".join(result)
  
new_contents: # Time:  f(n) = k * f(n/k) + n/k * klogk <= O(logn * nlogk) <= O(n^2)
  #        n is the length of S, k is the max number of special strings in each depth
  # Space: O(n)
      
  class Solution(object):
      def makeLargestSpecial(self, S):
          """
          :type S: str
          :rtype: str
          """
          result = []
          j = count = 0
          for i, v in enumerate(S):
              count += 1 if v == '1' else -1
              if count == 0:
                  result.append("1{}0".format(self.makeLargestSpecial(S[j+1:i])))
                  j = i+1
          result.sort(reverse = True)
          return "".join(result)
  
subject: Update special-binary-string.py