Length of the longest substring with no consecutive same letters

Given a string str, the task is to find the length of the longest sub-string which does not have any pair of consecutive same characters.

Examples:

Input: str = “abcdde”
Output: 4
“abcd” is the longest



Input: str = “ccccdeededff”
Output: 5
“ededf” is the longest

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

  • Initialize cnt and maxi as 1 initially, since this is the minimum answer of the length of the longest answer.
  • Iterate in the string from 1 to n – 1 and increment cnt by 1 if str[i] != str[i – 1].
  • If str[i] == str[i – 1], then re-initialize cnt as 1 and maxi to max(maxi, cnt).

Below is the implementation of the above approach:

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
  
// Function to return the length
// of the required sub-string
int longestSubstring(string s)
{
    int cnt = 1;
    int maxi = 1;
  
    // Get the length of the string
    int n = s.length();
  
    // Iterate in the string
    for (int i = 1; i < n; i++) {
  
        // Check for not consecutive
        if (s[i] != s[i - 1])
            cnt++;
        else {
  
            // If cnt greater than maxi
            maxi = max(cnt, maxi);
  
            // Re-initialize
            cnt = 1;
        }
    }
  
    // Check after iteration
    // is complete
    maxi = max(cnt, maxi);
  
    return maxi;
}
  
// Driver code
int main()
{
    string s = "ccccdeededff";
    cout << longestSubstring(s);
  
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java implementation of the approach 
import java.lang.Math;
  
class GfG
{
  
    // Function to return the length 
    // of the required sub-string 
    static int longestSubstring(String s) 
    
        int cnt = 1, maxi = 1
      
        // Get the length of the string 
        int n = s.length(); 
      
        // Iterate in the string 
        for (int i = 1; i < n; i++) 
        
      
            // Check for not consecutive 
            if (s.charAt(i) != s.charAt(i-1)) 
                cnt++; 
            else 
            
      
                // If cnt greater than maxi 
                maxi = Math.max(cnt, maxi); 
      
                // Re-initialize 
                cnt = 1
            
        
      
        // Check after iteration is complete 
        maxi = Math.max(cnt, maxi); 
      
        return maxi; 
    
  
    // Driver code
    public static void main(String []args)
    {
          
        String s = "ccccdeededff";
        System.out.println(longestSubstring(s));
    }
}
  
// This code is contributed by Rituraj Jain

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# implementation of the approach 
using System;
  
class GfG 
  
    // Function to return the length 
    // of the required sub-string 
    static int longestSubstring(string s) 
    
        int cnt = 1, maxi = 1; 
      
        // Get the length of the string 
        int n = s.Length; 
      
        // Iterate in the string 
        for (int i = 1; i < n; i++) 
        
      
            // Check for not consecutive 
            if (s[i] != s[i - 1]) 
                cnt++; 
            else
            
      
                // If cnt greater than maxi 
                maxi = Math.Max(cnt, maxi); 
      
                // Re-initialize 
                cnt = 1; 
            
        
      
        // Check after iteration is complete 
        maxi = Math.Max(cnt, maxi); 
      
        return maxi; 
    
  
    // Driver code 
    static void Main() 
    
          
        string s = "ccccdeededff"
        Console.WriteLine(longestSubstring(s)); 
    
  
// This code is contributed by mits

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python3 implementation of the approach 
  
# Function to return the length 
# of the required sub-string 
def longestSubstring(s) :
  
    cnt = 1
    maxi = 1
  
    # Get the length of the string 
    n = len(s); 
  
    # Iterate in the string 
    for i in range(1, n) : 
  
        # Check for not consecutive 
        if (s[i] != s[i - 1]) :
            cnt += 1
              
        else :
              
            # If cnt greater than maxi 
            maxi = max(cnt, maxi); 
  
            # Re-initialize 
            cnt = 1
  
    # Check after iteration 
    # is complete 
    maxi = max(cnt, maxi); 
  
    return maxi; 
  
# Driver code 
if __name__ == "__main__" :
      
    s = "ccccdeededff";
    print(longestSubstring(s)); 
      
# This code is contirbuted by Ryuga

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP implementation of the approach
  
// Function to return the length
// of the required sub-string
function longestSubstring($s)
{
    $cnt = 1;
    $maxi = 1;
  
    // Get the length of the string
    $n = strlen($s);
  
    // Iterate in the string
    for ($i = 1; $i < $n; $i++)
    {
  
        // Check for not consecutive
        if ($s[$i] != $s[$i - 1])
            $cnt++;
        else
        {
  
            // If cnt greater than maxi
            $maxi = max($cnt, $maxi);
  
            // Re-initialize
            $cnt = 1;
        }
    }
  
    // Check after iteration
    // is complete
    $maxi = max($cnt, $maxi);
  
    return $maxi;
}
  
// Driver code
$s = "ccccdeededff";
echo longestSubstring($s);
  
// This code is contributed by Akanksha Rai
?>

chevron_right


Output:

5


My Personal Notes arrow_drop_up

Striver(underscore)79 at Codechef and codeforces D

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.