java.lang.Object
g3501_3600.s3501_maximize_active_section_with_trade_ii.Solution

public class Solution extends Object
3501 - Maximize Active Section with Trade II.

Hard

You are given a binary string s of length n, where:

  • '1' represents an active section.
  • '0' represents an inactive section.

You can perform at most one trade to maximize the number of active sections in s. In a trade, you:

  • Convert a contiguous block of '1's that is surrounded by '0's to all '0's.
  • Afterward, convert a contiguous block of '0's that is surrounded by '1's to all '1's.

Additionally, you are given a 2D array queries, where queries[i] = [li, ri] represents a substring s[li…ri].

For each query, determine the maximum possible number of active sections in s after making the optimal trade on the substring s[li…ri].

Return an array answer, where answer[i] is the result for queries[i].

Note

  • For each query, treat s[li…ri] as if it is augmented with a '1' at both ends, forming t = ‘1’ + s[li…ri] + ‘1’. The augmented '1's do not contribute to the final count.
  • The queries are independent of each other.

Example 1:

Input: s = “01”, queries = [[0,1]]

Output: [1]

Explanation:

Because there is no block of '1's surrounded by '0's, no valid trade is possible. The maximum number of active sections is 1.

Example 2:

Input: s = “0100”, queries = [[0,3],[0,2],[1,3],[2,3]]

Output: [4,3,1,1]

Explanation:

  • Query [0, 3] \u2192 Substring "0100" \u2192 Augmented to "101001"
    Choose "0100", convert "0100" \u2192 "0000" \u2192 "1111".
    The final string without augmentation is "1111". The maximum number of active sections is 4.

  • Query [0, 2] \u2192 Substring "010" \u2192 Augmented to "10101"
    Choose "010", convert "010" \u2192 "000" \u2192 "111".
    The final string without augmentation is "1110". The maximum number of active sections is 3.

  • Query [1, 3] \u2192 Substring "100" \u2192 Augmented to "11001"
    Because there is no block of '1's surrounded by '0's, no valid trade is possible. The maximum number of active sections is 1.

  • Query [2, 3] \u2192 Substring "00" \u2192 Augmented to "1001"
    Because there is no block of '1's surrounded by '0's, no valid trade is possible. The maximum number of active sections is 1.

Example 3:

Input: s = “1000100”, queries = [[1,5],[0,6],[0,4]]

Output: [6,7,2]

Explanation:

  • Query [1, 5] \u2192 Substring "00010" \u2192 Augmented to "1000101"
    Choose "00010", convert "00010" \u2192 "00000" \u2192 "11111".
    The final string without augmentation is "1111110". The maximum number of active sections is 6.

  • Query [0, 6] \u2192 Substring "1000100" \u2192 Augmented to "110001001"
    Choose "000100", convert "000100" \u2192 "000000" \u2192 "111111".
    The final string without augmentation is "1111111". The maximum number of active sections is 7.

  • Query [0, 4] \u2192 Substring "10001" \u2192 Augmented to "1100011"
    Because there is no block of '1's surrounded by '0's, no valid trade is possible. The maximum number of active sections is 2.

Example 4:

Input: s = “01010”, queries = [[0,3],[1,4],[1,3]]

Output: [4,4,2]

Explanation:

  • Query [0, 3] \u2192 Substring "0101" \u2192 Augmented to "101011"
    Choose "010", convert "010" \u2192 "000" \u2192 "111".
    The final string without augmentation is "11110". The maximum number of active sections is 4.

  • Query [1, 4] \u2192 Substring "1010" \u2192 Augmented to "110101"
    Choose "010", convert "010" \u2192 "000" \u2192 "111".
    The final string without augmentation is "01111". The maximum number of active sections is 4.

  • Query [1, 3] \u2192 Substring "101" \u2192 Augmented to "11011"
    Because there is no block of '1's surrounded by '0's, no valid trade is possible. The maximum number of active sections is 2.

Constraints:

  • 1 <= n == s.length <= 105
  • 1 <= queries.length <= 105
  • s[i] is either '0' or '1'.
  • queries[i] = [li, ri]
  • 0 <= li <= ri < n
  • Constructor Details

    • Solution

      public Solution()
  • Method Details

    • maxActiveSectionsAfterTrade

      public List<Integer> maxActiveSectionsAfterTrade(String s, int[][] queries)