Frequency of maximum occurring subsequence in given string Last Updated : 04 Jan, 2023 Comments Improve Suggest changes Like Article Like Report Given a string str of lowercase English alphabets, our task is to find the frequency of occurrence a subsequence of the string which occurs the maximum times. Examples: Input: s = "aba" Output: 2 Explanation: For "aba", subsequence "ab" occurs maximum times in subsequence 'ab' and 'aba'. Input: s = "acbab" Output: 3 Explanation: For "acbab", "ab" occurs 3 times which is the maximum. Approach: The problem can be solved using Dynamic Programming. To solve the problem mentioned above the key observation is that the resultant subsequence will be of length 1 or 2 because frequency of any subsequence of length > 2 will be lower than the subsequence of length 1 or 2 as they are also present in higher length subsequences. So we need to check for the subsequence of length 1 or 2 only. Below are the steps: For length 1 count the frequency of each alphabet in the string.For length 2 form a 2D array dp[26][26], where dp[i][j] tells frequency of string of char('a' + i) + char('a' + j).The recurrence relation is used in the step 2 is given by: dp[i][j] = dp[i][j] + freq[i] where, freq[i] = frequency of character char('a' + i) dp[i][j] = frequency of string formed by current_character + char('a' + i). The maximum of frequency array and array dp[][] gives the maximum count of any subsequence in the given string. Below is the implementation of the above approach: C++ // C++ program for the above approach #include <bits/stdc++.h> #define ll long long using namespace std; // Function to find the frequency ll findCount(string s) { // freq stores frequency of each // english lowercase character ll freq[26]; // dp[i][j] stores the count of // subsequence with 'a' + i // and 'a' + j character ll dp[26][26]; memset(freq, 0, sizeof freq); // Initialize dp to 0 memset(dp, 0, sizeof dp); for (int i = 0; i < s.size(); ++i) { for (int j = 0; j < 26; j++) { // Increment the count of // subsequence j and s[i] dp[j][s[i] - 'a'] += freq[j]; } // Update the frequency array freq[s[i] - 'a']++; } ll ans = 0; // For 1 length subsequence for (int i = 0; i < 26; i++) ans = max(freq[i], ans); // For 2 length subsequence for (int i = 0; i < 26; i++) { for (int j = 0; j < 26; j++) { ans = max(dp[i][j], ans); } } // Return the final result return ans; } // Driver Code int main() { // Given string str string str = "acbab"; // Function Call cout << findCount(str); return 0; } Java // Java program for the above approach class GFG{ // Function to find the frequency static int findCount(String s) { // freq stores frequency of each // english lowercase character int []freq = new int[26]; // dp[i][j] stores the count of // subsequence with 'a' + i // and 'a' + j character int [][]dp = new int[26][26]; for(int i = 0; i < s.length(); ++i) { for(int j = 0; j < 26; j++) { // Increment the count of // subsequence j and s[i] dp[j][s.charAt(i) - 'a'] += freq[j]; } // Update the frequency array freq[s.charAt(i) - 'a']++; } int ans = 0; // For 1 length subsequence for(int i = 0; i < 26; i++) ans = Math.max(freq[i], ans); // For 2 length subsequence for(int i = 0; i < 26; i++) { for(int j = 0; j < 26; j++) { ans = Math.max(dp[i][j], ans); } } // Return the final result return ans; } // Driver Code public static void main(String[] args) { // Given String str String str = "acbab"; // Function call System.out.print(findCount(str)); } } // This code is contributed by amal kumar choubey Python3 # Python3 program for the above approach import numpy # Function to find the frequency def findCount(s): # freq stores frequency of each # english lowercase character freq = [0] * 26 # dp[i][j] stores the count of # subsequence with 'a' + i # and 'a' + j character dp = [[0] * 26] * 26 freq = numpy.zeros(26) dp = numpy.zeros([26, 26]) for i in range(0, len(s)): for j in range(26): # Increment the count of # subsequence j and s[i] dp[j][ord(s[i]) - ord('a')] += freq[j] # Update the frequency array freq[ord(s[i]) - ord('a')] += 1 ans = 0 # For 1 length subsequence for i in range(26): ans = max(freq[i], ans) # For 2 length subsequence for i in range(0, 26): for j in range(0, 26): ans = max(dp[i][j], ans) # Return the final result return int(ans) # Driver Code # Given string str str = "acbab" # Function call print(findCount(str)) # This code is contributed by sanjoy_62 C# // C# program for the above approach using System; class GFG{ // Function to find the frequency static int findCount(String s) { // freq stores frequency of each // english lowercase character int []freq = new int[26]; // dp[i,j] stores the count of // subsequence with 'a' + i // and 'a' + j character int [,]dp = new int[26, 26]; for(int i = 0; i < s.Length; ++i) { for(int j = 0; j < 26; j++) { // Increment the count of // subsequence j and s[i] dp[j, s[i] - 'a'] += freq[j]; } // Update the frequency array freq[s[i] - 'a']++; } int ans = 0; // For 1 length subsequence for(int i = 0; i < 26; i++) ans = Math.Max(freq[i], ans); // For 2 length subsequence for(int i = 0; i < 26; i++) { for(int j = 0; j < 26; j++) { ans = Math.Max(dp[i, j], ans); } } // Return the readonly result return ans; } // Driver Code public static void Main(String[] args) { // Given String str String str = "acbab"; // Function call Console.Write(findCount(str)); } } // This code is contributed by Rajput-Ji JavaScript <script> // JavaScript program for the above approach // Function to find the frequency function findCount(s) { // freq stores frequency of each // english lowercase character var freq = Array(26).fill(0); // dp[i][j] stores the count of // subsequence with 'a' + i // and 'a' + j character var dp = Array.from(Array(26), ()=>Array(26).fill(0)); for (var i = 0; i < s.length; ++i) { for (var j = 0; j < 26; j++) { // Increment the count of // subsequence j and s[i] dp[j][s[i].charCodeAt(0) - 'a'.charCodeAt(0)] += freq[j]; } // Update the frequency array freq[s[i].charCodeAt(0) - 'a'.charCodeAt(0)]++; } var ans = 0; // For 1 length subsequence for (var i = 0; i < 26; i++) ans = Math.max(freq[i], ans); // For 2 length subsequence for (var i = 0; i < 26; i++) { for (var j = 0; j < 26; j++) { ans = Math.max(dp[i][j], ans); } } // Return the final result return ans; } // Driver Code // Given string str var str = "acbab"; // Function Call document.write( findCount(str)); </script> Output: 3 Time Complexity: O(26*N), where N is the length of the given string.Auxiliary Space: O(M), where M = 26*26 Comment More infoAdvertise with us Next Article Frequency of maximum occurring subsequence in given string kuwal786 Follow Improve Article Tags : Strings Analysis of Algorithms Dynamic Programming Greedy Searching DSA Arrays subsequence frequency-counting +5 More Practice Tags : ArraysDynamic ProgrammingGreedySearchingStrings +1 More Similar Reads Substring of length K having maximum frequency in the given string Given a string str, the task is to find the substring of length K which occurs the maximum number of times. If more than one string occurs maximum number of times, then print the lexicographically smallest substring. Examples: Input: str = "bbbbbaaaaabbabababa", K = 5Output: ababaExplanation:The sub 14 min read Maximum consecutive occurrences of a string in another given string Given two strings str1 and str2, the task is to count the maximum consecutive occurrences of the string str2 in the string str1. Examples: Input: str1 = âabababcbaâ, str2 = âbaâ Output: 2 Explanation: String str2 occurs consecutively in the substring { str[1], ..., str[4] }. Therefore, the maximum c 7 min read Count subsequence of length three in a given string Given a string of length n and a subsequence of length 3. Find the total number of occurrences of the subsequence in this string. Examples : Input : string = "GFGFGYSYIOIWIN", subsequence = "GFG" Output : 4 Explanation : There are 4 such subsequences as shown: GFGFGYSYIOIWIN GFGFGYSYIOIWIN GFGFGYSYI 15 min read Find maximum occurring character in a string Given string str. The task is to find the maximum occurring character in the string str.Examples:Input: geeksforgeeksOutput: eExplanation: 'e' occurs 4 times in the stringInput: testOutput: tExplanation: 't' occurs 2 times in the stringReturn the maximum occurring character in an input string using 8 min read Maximum length substring with highest frequency in a string Given a string. The task is to find the maximum occurred substring with a maximum length. These occurrences can overlap. Examples: Input: str = "abab" Output: ab "a", "b", "ab" are occur 2 times. But, "ab" has maximum length Input: str = "abcd" Output: a Approach: The idea is to store the frequency 5 min read Count of maximum occurring subsequence using only those characters whose indices are in GP Given a string S, the task is to find the count of maximum occurring subsequence P from S using only those characters whose indexes are in Geometric Progression.Note: Consider 1-based indexing in S. Examples : Input: S = "ddee"Output: 4Explanation: If we take P = "de", then P occurs 4 times in S. { 7 min read Maximum repeated frequency of characters in a given string Given a string S, the task is to find the count of maximum repeated frequency of characters in the given string S.Examples: Input: S = "geeksgeeks" Output: Frequency 2 is repeated 3 times Explanation: Frequency of characters in the given string - {"g": 2, "e": 4, "k": 2, "s": 2} The frequency 2 is r 6 min read Count of Distinct Substrings occurring consecutively in a given String Given a string str, the task is to find the number of distinct substrings that are placed consecutively in the given string. Examples: Input: str = "geeksgeeksforgeeks" Output: 2 Explanation: geeksgeeksforgeeks -> {"geeks"} geeksgeeksforgeeks -> {"e"} Only one consecutive occurrence of "e" is 14 min read Count maximum occurrence of subsequence in string such that indices in subsequence is in A.P. Given a string S, the task is to count the maximum occurrence of subsequences in the given string such that the indices of the characters of the subsequence are Arithmetic Progression. Examples: Input: S = "xxxyy" Output: 6 Explanation: There is a subsequence "xy", where indices of each character of 12 min read Concatenate the strings in an order which maximises the occurrence of subsequence "ab" Given N strings containing of characters 'a' and 'b'. These string can be concatenated in any order to make a single final string S. The score of the final string S is defined as the number of occurrences of the subsequence "ab" in it. Now, the task is to concatenate the string in such a way that th 12 min read Like