# 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 same``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 = max(temp, ans);``            ``temp = 2;``        ``}``    ``}` `    ``ans = max(temp, ans);` `    ``return` `ans;``}` `// Driver code``int` `main()``{``    ``string s = ``"baaabbabbb"``;` `    ``cout << maxLenSubStr(s);` `    ``return` `0;``}`

## Java

 `// Java implementation of the approach``import` `java.util.*;` `class` `GFG``{` `// Function to return the length of the``// longest substring such that no three``// consecutive characters are same``static` `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 code``public` `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 same``def` `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 code``s ``=` `"baaabbabbb"` `print``(maxLenSubStr(s))` `# This code is contributed by Mohit Kumar`

## C#

 `// C# implementation of the approach``using` `System;` `class` `GFG``{``    ` `// Function to return the length of the``// longest substring such that no three``// consecutive characters are same``static` `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 code``static` `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