Python | DP | O(N) Onepass | Beats 90%
\nclass Solution:\n    def canReach(self, s: str, minJump: int, maxJump: int) -> bool:\n        if s[-1] == \'1\': return False\n        if minJump <= len(s)-1 
```\nclass Solution:\n    def canReach(self, s: str, minJump: int, maxJump: int) -> bool:\n        if s[-1] == \'1\': return False\n        if minJump <= len(s)-1 <= maxJump: return True\n        \n        dp = [1]*minJump\n        \n        for i in range(minJump, len(s)):\n            reachable = 0\n            if s[i] == \'0\':\n                reachable = dp[i-minJump] - (dp[i-maxJump-1] if i-maxJump > 0 else 0)\n            if reachable > 0:\n                dp.append(dp[-1] + 1)\n            else:\n                dp.append(dp[-1])\n                \n        return reachable>0\n```\n\n**Another DP Method, Time O(NK), (TLE)**\n```\nclass Solution:\n    def canReach(self, s: str, minJump: int, maxJump: int) -> bool:\n        if s[-1] == \'1\': return False\n        if minJump <= len(s)-1 <= maxJump: return True\n        \n        dp = [False]*len(s)\n        dp[0] = True\n        \n        for i in range(minJump, len(s)):\n            if s[i] == \'0\':\n                for j in range(max(0, i-maxJump), i-minJump+1):\n                    if dp[j]:\n                        dp[i] = True\n                        break\n        return dp[-1]\n```
['Dynamic Programming', 'Python']