Skip to content
Related Articles
Longest substring between any pair of occurrences ōf similar characters
• Last Updated : 22 Mar, 2021

Given a string S, the task is to find the length of the longest substring between any pair of occurrences of same character.

Examples:

Input: S = “accabbacc”
Output:
Explanation: The longest substring satisfying the required conditions is “cabbac”, which lies between S(= ‘c’) and s(= ‘c’).

Input: S = “aab”
Output: 0

Approach: Follow the steps below to solve the problem:

1. Initialize two variables res and diff to store the length of the longest substring and the length of the current substring between pair of same characters respectively.
2. Iterate over characters of the string from left to right.
3. Iterate over the remaining string on the right, from right to left up to the current character.
4. If two equal characters are obtained, i.e. S[i] = S[j], , store the length of the substring between them in diff.
5. Update the value of res as max(res, diff). so that res stores the longest substring of required type obtained so far.
6. After complete traversal of the string, print res as the required answer.

Below is the implementation of the above approach:

## C++

 `// C++ program to implement``// the above approach` `#include ``using` `namespace` `std;` `// Function to find the longest substring``// between pair of repetitions of the same character``int` `longestbetweenequalcharacters(string S)``{` `    ``// Length of the string``    ``int` `n = S.length();` `    ``// Stores the maximum length and``    ``// length of current substring``    ``// satisfying given conditions``    ``int` `res = -1, diff = -1;` `    ``// Traverse the string``    ``for` `(``int` `i = 0; i < n - 1; i++) {` `        ``// Search for repetition of S[i]``        ``for` `(``int` `j = n - 1; j > i; j--) {` `            ``// If repetition occurs``            ``if` `(S[i] == S[j]) {` `                ``// Store the length of``                ``// the substring``                ``diff = j - i - 1;` `                ``// Update maximum length of``                ``// substring obtained``                ``res = max(diff, res);``            ``}``        ``}``    ``}` `    ``// Return obtained maximum length``    ``return` `res;``}` `// Driver Code``int` `main()``{``    ``string s = ``"accabbacc"``;``    ``cout << longestbetweenequalcharacters(s);``}`

## Java

 `// Java program to implement``// the above approach``class` `GFG{``     ` `// Function to find the longest substring``// between pair of repetitions of the``// same character``static` `int` `longestbetweenequalcharacters(String S)``{``    ` `    ``// Length of the string``    ``int` `n = S.length();`` ` `    ``// Stores the maximum length and``    ``// length of current substring``    ``// satisfying given conditions``    ``int` `res = -``1``, diff = -``1``;`` ` `    ``// Traverse the string``    ``for``(``int` `i = ``0``; i < n - ``1``; i++)``    ``{``        ` `        ``// Search for repetition of S[i]``        ``for``(``int` `j = n - ``1``; j > i; j--)``        ``{``            ` `            ``// If repetition occurs``            ``if` `(S.charAt(i) == S.charAt(j))``            ``{``                ` `                ``// Store the length of``                ``// the substring``                ``diff = j - i - ``1``;`` ` `                ``// Update maximum length of``                ``// substring obtained``                ``res = Math.max(diff, res);``            ``}``        ``}``    ``}`` ` `    ``// Return obtained maximum length``    ``return` `res;``}`` ` `// Driver code``public` `static` `void` `main(String[] args)``{``    ` `    ``String s = ``"accabbacc"``;``    ` `    ``System.out.println(``        ``longestbetweenequalcharacters(s));``}``}` `// This code is contributed by code_hunt`

## Python3

 `# Python3 program to implement``# the above approach` `# Function to find the longest``# substring between pair of``# repetitions of the same character``def` `longestbetweenequalcharacters(S):``    ` `    ``# Length of the string``    ``n ``=` `len``(S)` `    ``# Stores the maximum length and``    ``# length of current substring``    ``# satisfying given conditions``    ``res ``=` `-``1``    ``diff ``=` `-``1` `    ``# Traverse the string``    ``for` `i ``in` `range``(n ``-` `1``):``        ` `        ``# Search for repetition of S[i]``        ``for` `j ``in` `range``(n ``-` `1``, i, ``-``1``):``            ` `            ``# If repetition occurs``            ``if` `(S[i] ``=``=` `S[j]):` `                ``# Store the length of``                ``# the substring``                ``diff ``=` `j ``-` `i ``-` `1` `                ``# Update maximum length of``                ``# substring obtained``                ``res ``=` `max``(diff, res)` `    ``# Return obtained maximum length``    ``return` `res` `# Driver Code``if` `__name__ ``=``=` `'__main__'``:``    ` `    ``s ``=` `"accabbacc"``    ` `    ``print``(longestbetweenequalcharacters(s))` `# This code is contributed by doreamon_`

## C#

 `// C# program to implement``// the above approach ``using` `System;` `class` `GFG{``      ` `// Function to find the longest substring``// between pair of repetitions of the``// same character``static` `int` `longestbetweenequalcharacters(String S)``{``    ` `    ``// Length of the string``    ``int` `n = S.Length;``  ` `    ``// Stores the maximum length and``    ``// length of current substring``    ``// satisfying given conditions``    ``int` `res = -1, diff = -1;``  ` `    ``// Traverse the string``    ``for``(``int` `i = 0; i < n - 1; i++)``    ``{``        ` `        ``// Search for repetition of S[i]``        ``for``(``int` `j = n - 1; j > i; j--)``        ``{``            ` `            ``// If repetition occurs``            ``if` `(S[i] == S[j])``            ``{``                ` `                ``// Store the length of``                ``// the substring``                ``diff = j - i - 1;``  ` `                ``// Update maximum length of``                ``// substring obtained``                ``res = Math.Max(diff, res);``            ``}``        ``}``    ``}``  ` `    ``// Return obtained maximum length``    ``return` `res;``}``  ` `// Driver code``public` `static` `void` `Main()``{``    ``string` `s = ``"accabbacc"``;``     ` `    ``Console.WriteLine(``        ``longestbetweenequalcharacters(s));``}``}` `// This code is contributed by sanjoy_62`

## Javascript

 ``
Output:
`6`

Time Complexity: O(N2)
Auxiliary Space: O(1)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with industry experts, please refer DSA Live Classes

My Personal Notes arrow_drop_up