# Longest Non-Increasing Subsequence in a Binary String

Longest Non-Increasing Subsequence in a Binary StringGiven a binary string S of size N, the task is to find the length of the longest non-increasing subsequence in the given string S.Examples:Input: S = “0101110110100001011”Output: 12 Explanation: The longest non-increasing subsequence is “111111100000”, having length equal to 12.Input: S = 10101Output: 3Approach: The given problem can be solved based on the observation that the string S is a binary string so a non-increasing subsequence will always consist of 0 with more consecutive 1s or 1 with more consecutive 0s. Follow the below steps to solve the problem:Initialize an array, say pre[], that stores the number of 1s till each index i for i over the range [0, N – 1].Initialize an array, say post[], that stores the number of 0s till each index i to the end of the string for i over the range [0, N – 1].Initialize a variable, say ans that stores the length of the longest non-increasing subsequence in the given string S.Iterate over the range [0, N – 1] and update the value of ans to the maximum of ans and (pre[i] + post[i]).After completing the above steps, print the value of ans as the result.Below is the implementation of the above approach:C++ #include using namespace std; int findLength(string str, int n){ int pre[n], post[n]; memset(pre, 0, sizeof(pre)); memset(post, 0, sizeof(post)); for (int i = 0; i < n; i++) { if (i != 0) { pre[i] += pre[i - 1]; } if (str[i] == '1') { pre[i] += 1; } } for (int i = n - 1; i >= 0; i–) { if (i != n – 1) post[i] += post[i + 1]; if (str[i] == ‘0’) post[i] += 1; } int ans = 0; for (int i = 0; i < n; i++) { ans = max(ans, pre[i] + post[i]); } return ans;} int main(){ string S = "0101110110100001011"; cout