You are given a **0-indexed** binary string `s` and two integers `minJump` and `maxJump`. In the beginning, you are standing at index `0`, which is equal to `'0'`. You can move from index `i` to index `j` if the following conditions are fulfilled: - `i + minJump <= j <= min(i + maxJump, s.length - 1)`, and - `s[j] == '0'`. Return `true` if you can reach index `s.length - 1` in `s`, or `false` otherwise.
Example 1
Input: s = 011010, minJump = 2, maxJump = 3
Output: true
Explanation: 0→3 (jump 3, s[3]='0') then 3→5 (jump 2, s[5]='0') reaches the last index.
Example 2
Input: s = 01101110, minJump = 2, maxJump = 3
Output: false
Explanation: From index 0 the only reachable '0' is index 3. From index 3 the reachable indices 5 and 6 are both '1'. So the path stops at index 3 and never reaches the last index.
Example 3
Input: s = 0000000000, minJump = 1, maxJump = 2
Output: true
Explanation: Every character is '0', so you can move one step at a time all the way to the last index.
dp[i] is reachable if s[i]=='0' AND some already-reachable index sits in the window [i-maxJump, i-minJump]. Checking 'any reachable in a window' fast is a prefix-sum (or sliding-count) over the dp array — O(1) per position.
Run checks all cases above. Submit evaluates all test cases.