Count of strings that can be formed using a , b and c under given constraints | n is total number of characters . bCount and cCount are counts of ' b ' and ' c ' respectively . ; Base cases ; if we had saw this combination previously ; Three cases , we choose , a or b or c In all three cases n decreases by 1. ; A wrapper over countStrUtil ( ) ; Total number of characters
function countStrUtil ( dp , n , bCount , cCount ) { if ( bCount < 0 cCount < 0 ) { return 0 ; } if ( n == 0 ) { return 1 ; } if ( bCount == 0 && cCount == 0 ) { return 1 ; } if ( dp [ n ] [ bCount ] [ cCount ] != - 1 ) { return dp [ n ] [ bCount ] [ cCount ] ; } var res = countStrUtil ( dp , n - 1 , bCount , cCount ) ; res += countStrUtil ( dp , n - 1 , bCount - 1 , cCount ) ; res += countStrUtil ( dp , n - 1 , bCount , cCount - 1 ) ; return ( dp [ n ] [ bCount ] [ cCount ] = res ) ; } function countStr ( n , bCount , cCount ) { dp = Array ( n + 1 ) . fill ( 0 ) . map ( x => Array ( 2 ) . fill ( 0 ) . map ( x => Array ( 3 ) . fill ( 0 ) ) ) ; for ( i = 0 ; i < n + 1 ; i ++ ) { for ( j = 0 ; j < 2 ; j ++ ) { for ( k = 0 ; k < 3 ; k ++ ) { dp [ i ] [ j ] [ k ] = - 1 ; } } } return countStrUtil ( dp , n , bCount , cCount ) ; } var n = 3 ; var bCount = 1 , cCount = 2 ; document . write ( countStr ( n , bCount , cCount ) ) ;