Java- Sliding window-2ms and Simple Dp- 8ms, O(n)
Sliding Window- O(n)\n\nHere I\'m being greedy towards maxJump i.e iterating with maxJumps but also checking if I can futher jump atleast minJump using Silding 
Sliding Window- O(n)\n\nHere I\'m being greedy towards maxJump i.e iterating with maxJumps but also checking if I can futher jump atleast minJump using Silding Window!!!\n\n```\n\tpublic boolean canReach(String str, int minJump, int maxJump) {\n        \n        int prev_i=0,fg=0,i=0,j=maxJump,n=str.length();\n        while(true)\n        {\n            //if j exceeds n-1 then set it to n-1 and take flag variable to assure that this is last chance to reach 0\n            if(j>=n)\n            {\n                fg=1;\n                j=n-1;\n            }\n            \n            //setting j to maxJump index having 0\n            while(str.charAt(j)==\'1\')\n                j--;\n            \n            //diff between the two index i.e the jump\n            int diff=j-i;\n            \n            //if diff is less then the minJump then setting i to previous nearest zero so that we can achieve the minJump atleast!!\n            if(diff<minJump&&i<j)\n            {\n                while(diff<minJump)\n                {\n                    i--;\n                    while(i>=0&&str.charAt(i)==\'1\')\n                        i--;\n                    diff=j-i;\n                    if(i==0)\n                        break;\n                }\n            }\n            \n            //diff between the previous jump. This is because we have updated the i so to check that if the condition is still true \n            int diff2=i-prev_i;\n            \n            //checking current jump and also the previous jump if exists else return false and iterate with j with maxJump\n            if(diff>=minJump&&diff<=maxJump)\n            {\n                if(i>0&&!(diff2>=minJump&&diff2<=maxJump))\n                    return false;\n                prev_i=i;\n                i=j;\n                j+=maxJump;\n            }\n            else\n                return false;\n            \n            //flag equals to zero or i reaches end\n            if(fg==1||i==n-1)\n                break;\n        }\n        \n        if(i==n-1)\n            return true;\n        return false;\n    }\n````\n\nDp - O(n)\n\nHere I\'m storing each ith index to dp if ith index statisfy the condition else storing the previous index to it, By doing this I can have all "i-minJump" indexes to check wherether i th index satisfy the condition or not  \n\n```\n\n\tpublic boolean canReach(String s, int minJump, int maxJump) {\n        int i = 0,n=s.length();\n        int dp[]=new int[n];\n        while(++i < s.length()){\n            if(s.charAt(i) == \'0\'){\n                if(i-minJump>=0&&dp[i-minJump]+maxJump >= i)\n                    dp[i]=i;\n                else\n                \tdp[i]=dp[i-1];\n            }\n            else\n            \tdp[i]=dp[i-1];\n        }\n        return dp[n-1]==n-1;\n    }\n\n\'\'\'\n\nIf you guys get it then please upvote my solution!!!\nIt really makes me motivate to drop such type of explanations!!!
['Dynamic Programming', 'Sliding Window', 'Java']