1871. Jump Game VII
Description
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), ands[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: In the first step, move from index 0 to index 3. In the second step, move from index 3 to index 5.
Example 2:
Input: s = "01101110", minJump = 2, maxJump = 3 Output: false
Constraints:
2 <= s.length <= 105s[i]is either'0'or'1'.s[0] == '0'1 <= minJump <= maxJump < s.length
Solutions
Solution: Dynamic Programming + Prefix Sum
- Time complexity: O(n)
- Space complexity: O(n)
JavaScript
js
/**
* @param {string} s
* @param {number} minJump
* @param {number} maxJump
* @return {boolean}
*/
const canReach = function (s, minJump, maxJump) {
const n = s.length;
if (s[n - 1] === '1') return false;
const dp = Array.from({ length: n }, () => 0);
let validJump = 0;
dp[minJump] += 1;
dp[maxJump + 1] -= 1;
for (let index = 1; index < n; index++) {
validJump += dp[index];
if (!validJump || s[index] === '1') continue;
dp[index + minJump] += 1;
dp[index + maxJump + 1] -= 1;
}
return validJump > 0;
};