Open In App

Maximum length substring with highest frequency in a string

Last Updated : 08 Dec, 2022
Comments
Improve
Suggest changes
Like Article
Like
Report

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++
// 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 string 
string 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 program 
int main() 
{ 
    string str = "ababecdecd"; 

    // function call 
    cout << MaxFreq(str); 

    return 0; 
} 
Java
// Java program to find maximum 
// occurred subString of a String 
import java.util.*;
class GFG{ 

// Function to return maximum 
// occurred subString of a String 
static 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 code
public static void main(String[] args) 
{ 
  String str = "ababecdecd"; 

  // Function call 
  System.out.print(MaxFreq(str)); 
} 
} 

// This code is contributed by shikhasingrajput 
Python3
# Python3 program to find maximum 
# occurred of a string 

# function to return maximum occurred 
# substring of a string 
def 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 code 
string = "ababecdecd"

print(MaxFreq(string)) 
        
# This code is contributed by Mohit kumar 29     
C#
// C# program to find maximum 
// occurred substring of a string 
using System; 
using System.Collections.Generic;

class GFG{ 

// Function to return maximum
// occurred substring of a string
static 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 Code 
public static void Main(string[] args) 
{ 
    string str = "ababecdecd";

    // Function call
    Console.Write(MaxFreq(str));
}
} 

// This code is contributed by rutvik_56
JavaScript
<script>

// JavaScript program to find maximum
// occurred subString of a String

// Function to return maximum
// occurred subString of a String
function 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 call
document.write(MaxFreq(str));

// This code is contributed by patel2127

</script>

Output
ecd

Time Complexity: O(n2), where n is the length of the given string.
Auxiliary Space: O(n), where n is the length of the given string.


Next Article
Practice Tags :

Similar Reads