 Open in App
Not now

# 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
Related Articles