Maximum length substring with highest frequency in a string - GeeksforGeeks

25 Oct, 2021
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 of each substring using a map and print the one with maximum frequency and maximum length. Below is the implementation of the above approach:  
C++
Java
Python3
C#
Javascript
// C++ program to find maximum// occurred substring of a string#include <bits/stdc++.h>using namespace std; // function to return maximum// occurred substring of a stringstring MaxFreq(string str){    // size of the string    int n = str.size();     unordered_map<string, int> m;     for (int i = 0; i < n; i++) {        string s = "";        for (int j = i; j < n; j++) {            s += str[j];            m[s]++;        }    }     // to store maximum frequency    int maxi = 0;     // to store string which has maximum frequency    string s;    for (auto i = m.begin(); i != m.end(); i++) {        if (i->second > maxi) {            maxi = i->second;            s = i->first;        }        else if (i->second == maxi) {            string ss = i->first;            if (ss.size() > s.size())                s = ss;        }    }     // return substring which has maximum frequency    return s;} // Driver programint main(){    string str = "ababecdecd";     // function call    cout << MaxFreq(str);     return 0;}
// Java program to find maximum// occurred subString of a Stringimport java.util.*;class GFG{ // Function to return maximum// occurred subString of a Stringstatic String MaxFreq(String str){  // Size of the String  int n = str.length();   Map<String,      Integer> mp = new HashMap<String,                                Integer>();   for (int i = 0; i < n; i++)  {    String s = "";    for (int j = i; j < n; j++)    {      s += str.charAt(j);      if(mp.containsKey(s))      {        mp.put(s, mp.get(s) + 1);      }      else      {        mp.put(s, 1);      }    }  }   // To store maximum frequency  int maxi = 0;   // To store String which  // has maximum frequency  String s = "";  for (Map.Entry<String,                 Integer> i : mp.entrySet())  {    if (i.getValue() > maxi)    {      maxi = i.getValue();      s = i.getKey();    }    else if (i.getValue() == maxi)    {      String ss = i.getKey();      if (ss.length() > s.length())        s = ss;    }  }   // Return subString which  // has maximum frequency  return s;} // Driver codepublic static void main(String[] args){  String str = "ababecdecd";   // Function call  System.out.print(MaxFreq(str));}} // This code is contributed by shikhasingrajput
# Python3 program to find maximum# occurred of a string # function to return maximum occurred# substring of a stringdef MaxFreq(s):         # size of string    n = len(s)         m = dict()         for i in range(n):        string = ''        for j in range(i, n):            string += s[j]            if string in m.keys():                m[string] += 1            else:                m[string] = 1                     # to store maximum frequency    maxi = 0         # To store string which has    # maximum frequency    maxi_str = ''         for i in m:        if m[i] > maxi:            maxi = m[i]            maxi_str = i        elif m[i] == maxi:            ss = i            if len(ss) > len(maxi_str):                maxi_str = ss                     # return substring which has maximum freq    return maxi_str     # Driver codestring = "ababecdecd" print(MaxFreq(string))         # This code is contributed by Mohit kumar 29    
// C# program to find maximum// occurred substring of a stringusing System;using System.Collections.Generic; class GFG{ // Function to return maximum// occurred substring of a stringstatic string MaxFreq(string str){         // Size of the string    int n = str.Length;         Dictionary<string,               int> m = new Dictionary<string,                                       int>();                             for(int i = 0; i < n; i++)    {        string sp = "";        for(int j = i; j < n; j++)        {            sp += str[j];            if(m.ContainsKey(sp))            {                m[sp]++;            }            else            {                m[sp] = 1;            }        }    }     // To store maximum frequency    int maxi = 0;     // To store string which has maximum frequency    string s = "";         foreach(KeyValuePair<string, int> i in m)    {        if (i.Value > maxi)        {            maxi = i.Value;            s = i.Key;        }        else if (i.Value == maxi)        {            string ss = i.Key;            if (ss.Length > s.Length)                s = ss;        }    }     // Return substring which has    // maximum frequency    return s;} // Driver Codepublic static void Main(string[] args){    string str = "ababecdecd";     // Function call    Console.Write(MaxFreq(str));}} // This code is contributed by rutvik_56
<script> // JavaScript program to find maximum// occurred subString of a String // Function to return maximum// occurred subString of a Stringfunction MaxFreq(str){    // Size of the String  let n = str.length;    let mp = new Map();    for (let i = 0; i < n; i++)  {    let s = "";    for (let j = i; j < n; j++)    {      s += str[j];      if(mp.has(s))      {        mp.set(s, mp.get(s) + 1);      }      else      {        mp.set(s, 1);      }    }     }    // To store maximum frequency  let maxi = 0;    // To store String which  // has maximum frequency  let s = "";  for (let [key, value] of mp.entries())  {    if (value > maxi)    {      maxi = value;      s = key;    }    else if (value == maxi)    {     let ss = key;      if (ss.length > s.length)        s = ss;    }  }    // Return subString which  // has maximum frequency  return s;}  // Driver code let str = "ababecdecd"; // Function calldocument.write(MaxFreq(str)); // This code is contributed by patel2127 </script>
ecd
 
mohit kumar 29
rutvik_56
shikhasingrajput
patel2127
anikakapoor
simmytarika5
saurabh1990aror
cpp-unordered_map
Competitive Programming
Hash
Strings
Hash
Strings
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Prefix Sum Array - Implementation and Applications in Competitive Programming
Ordered Set and GNU C++ PBDS
Modulo 10^9+7 (1000000007)
Bits manipulation (Important tactics)
7 Best Coding Challenge Websites in 2020
Given an array A[] and a number x, check for pair in A[] with sum as x (aka Two Sum)
Internal Working of HashMap in Java
Count pairs with given sum
Hashing | Set 1 (Introduction)
Hashing | Set 3 (Open Addressing)