# Longest substring such that no three consecutive characters are same

• Difficulty Level : Medium
• Last Updated : 11 May, 2021

Given string str, the task is to find the length of the longest substring of str such that no three consecutive characters in the substring are same.
Examples:

Input: str = “baaabbabbb”
Output:
“aabbabb” is the required substring.
Input: str = “babba”
Output:
Given string itself is the longest substring.

Approach: The following steps can be followed to solve the problem:

• If the length of the given string is less than 3 then the length of the string will be the answer.
• Initialize temp and ans as 2 initially, since this is the minimum length of the longest substring when the length of the given string is greater than 2.
• Iterate in the string from 2 to N – 1 and increment temp by 1 if str[i] != str[i â€“ 1] or str[i] != str[i – 2].
• Else re-initialize temp = 2 and ans = max(ans, temp).

Below is the implementation of the above approach:

## C++

 // C++ implementation of the approach#include using namespace std; // Function to return the length of the// longest substring such that no three// consecutive characters are sameint maxLenSubStr(string& s){    // If the length of the given string    // is less than 3    if (s.length() < 3)        return s.length();     // Initialize temporary and final ans    // to 2 as this is the minimum length    // of substring when length of the given    // string is greater than 2    int temp = 2;    int ans = 2;     // Traverse the string from the    // third character to the last    for (int i = 2; i < s.length(); i++) {         // If no three consecutive characters        // are same then increment temporary count        if (s[i] != s[i - 1] || s[i] != s[i - 2])            temp++;         // Else update the final ans and        // reset the temporary count        else {            ans = max(temp, ans);            temp = 2;        }    }     ans = max(temp, ans);     return ans;} // Driver codeint main(){    string s = "baaabbabbb";     cout << maxLenSubStr(s);     return 0;}

## Java

 // Java implementation of the approachimport java.util.*; class GFG{ // Function to return the length of the// longest substring such that no three// consecutive characters are samestatic int maxLenSubStr(String s){    // If the length of the given string    // is less than 3    if (s.length() < 3)        return s.length();     // Initialize temporary and final ans    // to 2 as this is the minimum length    // of substring when length of the given    // string is greater than 2    int temp = 2;    int ans = 2;     // Traverse the string from the    // third character to the last    for (int i = 2; i < s.length(); i++)    {         // If no three consecutive characters        // are same then increment temporary count        if (s.charAt(i) != s.charAt(i - 1) ||            s.charAt(i) != s.charAt(i - 2))            temp++;         // Else update the final ans and        // reset the temporary count        else        {            ans = Math.max(temp, ans);            temp = 2;        }    }    ans = Math.max(temp, ans);     return ans;} // Driver codepublic static void main(String[] args){    String s = "baaabbabbb";     System.out.println(maxLenSubStr(s));}} // This code is contributed by PrinciRaj1992

## Python3

 # Python3 implementation of the approach # Function to return the length of the# longest substring such that no three# consecutive characters are samedef maxLenSubStr(s):         # If the length of the given string    # is less than 3    if (len(s) < 3):        return len(s)     # Initialize temporary and final ans    # to 2 as this is the minimum length    # of substring when length of the given    # string is greater than 2    temp = 2    ans = 2     # Traverse the string from the    # third character to the last    for i in range(2, len(s)):         # If no three consecutive characters        # are same then increment temporary count        if (s[i] != s[i - 1] or s[i] != s[i - 2]):            temp += 1         # Else update the final ans and        # reset the temporary count        else:            ans = max(temp, ans)            temp = 2    ans = max(temp, ans)     return ans # Driver codes = "baaabbabbb" print(maxLenSubStr(s)) # This code is contributed by Mohit Kumar

## C#

 // C# implementation of the approachusing System; class GFG{     // Function to return the length of the// longest substring such that no three// consecutive characters are samestatic int maxLenSubStr(String s){    // If the length of the given string    // is less than 3    if (s.Length < 3)        return s.Length;     // Initialize temporary and final ans    // to 2 as this is the minimum length    // of substring when length of the given    // string is greater than 2    int temp = 2;    int ans = 2;     // Traverse the string from the    // third character to the last    for (int i = 2; i < s.Length; i++)    {         // If no three consecutive characters        // are same then increment temporary count        if (s[i] != s[i - 1] ||            s[i] != s[i - 2])            temp++;         // Else update the final ans and        // reset the temporary count        else        {            ans = Math.Max(temp, ans);            temp = 2;        }    }    ans = Math.Max(temp, ans);     return ans;} // Driver codestatic public void Main (){    String s = "baaabbabbb";    Console.Write(maxLenSubStr(s));}} // This code is contributed by ajit.

## Javascript



Output:

7

Time Complexity: O(N) where N is the length of the string.
Space Complexity: O(1)

My Personal Notes arrow_drop_up