DP Variation (Coin Change)
Intuition\nConsider this as a classical Coin change problem wherein we had to count the number of ways we can form a target using a set of given denominations. 
# Intuition\nConsider this as a classical Coin change problem wherein we had to count the number of ways we can form a target using a set of given denominations. Here in this problem consider that instead of a single target you have three targets to reach.\n$$Target_1: l >=1$$,\n$$Target_2: e >=2$$,\n$$Target_3: t >=1$$,\n\nIf we satisfy all the three targets then we consider that string as a good string. So at each index $$i$$ if we place one of these character\'s then we decrement the count by one and if finally the count of all character\'s are zero then we have made up a string which is a good string for sure.\n\nIf at any point count of any character\'s becomes less than 0 then we make sure to take $$max(0,ch - character)$$. It\'s fine even if the count of character\'s become less than 0 as we need a minimum of $$1l,2e,1t$$ not eact value so. if at the end count of each one of them reaches zero it states that we have minimum of $$1l,2e,1t$$.\n\n# Complexity\n- Time complexity: $$O(n*12*26)$$\n\n- Space complexity: $$O(n*12)$$\n<!-- Add your space complexity here, e.g. $$O(n)$$ -->\n\n# Code\n```\n// Very similar to Coin Change\n\nclass Solution {\npublic:\n    #define ll long long\n    ll dp[100005][2][3][2];\n    const int M = 1e9 + 7;\n    ll f(int idx,int l,int e,int t,int n){\n        // base case\n        if(idx==n) return !l and !e and !t;\n        if(dp[idx][l][e][t] != -1) return dp[idx][l][e][t];\n        ll ans = 0;\n        for(int i=0;i<26;++i)\n            ans = (ans + f(idx+1,max(0,l-(i==11)),max(0,e-(i==4)),max(0,t-(i==19)),n))%M;\n        return dp[idx][l][e][t] = ans;\n    }\n\n    int stringCount(int n) {\n        memset(dp,-1,sizeof(dp));\n        return f(0,1,2,1,n);\n    }\n};\n```
['Dynamic Programming', 'C++']