# Longest substring such that no three consecutive characters are same

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:7

“aabbabb” is the required substring.Input:str = “babba”Output:5

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 <bits/stdc++.h>` `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

`<script>` ` ` `// Javascript implementation of the approach` ` ` ` ` `// Function to return the length of the` ` ` `// longest substring such that no three` ` ` `// consecutive characters are same` ` ` `function` `maxLenSubStr(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` ` ` `let temp = 2;` ` ` `let ans = 2;` ` ` `// Traverse the string from the` ` ` `// third character to the last` ` ` `for` `(let 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;` ` ` `}` ` ` ` ` `let s = ` `"baaabbabbb"` `;` ` ` `document.write(maxLenSubStr(s));` `</script>` |

**Output:**

7

**Time Complexity:** O(N) where N is the length of the string. **Space Complexity:** 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 experts, please refer **DSA Live Classes for Working Professionals **and **Competitive Programming Live for Students**.