Skip to content
Related Articles

Related Articles

Length of the longest substring that do not contain any palindrome
  • Difficulty Level : Medium
  • Last Updated : 20 May, 2019

Given a string of lowercase, find the length of the longest substring that does not contain any palindrome as a substring.

Examples:

Input : str = "daiict" 
Output : 3
dai, ict are longest substring that do not contain any 
palindrome as substring

Input : str = "a"
Output : 0
a is itself a palindrome

The idea is to observe that if any character forms a palindrome, it can not be included in any substring. So, in that case required substring will be picked from before or after that character which forms a palindrome.

Therefore, a simple solution is to traverse the string and for each character check whether it forms a palindrome of length 2 or 3 with its adjacent characters. If, does not then increase the length of substring otherwise re-initialize the length of the substring to zero. Using this approach find the length of the maximum substring.

Below is the implementation of the above approach:

C++




// C++ implementation of the above approach
  
#include <bits/stdc++.h>
using namespace std;
  
// Function to find the length of the longest
// substring
int lenoflongestnonpalindrome(string s)
{
    // initializing the variables
    int max1 = 1, len = 0;
  
    for (int i = 0; i < s.length() - 1; i++) {
        // checking palindrome of size 2
        // example: aa
        if (s[i] == s[i + 1])
            len = 0;
        // checking palindrome of size 3
        // example: aba
        else if (s[i + 1] == s[i - 1] && i > 0)
            len = 1;
        else // incrementing length of substring
            len++;
        max1 = max(max1, len + 1); // finding maximum
    }
  
    // if there exits single character then
    // it is always palindrome
    if (max1 == 1)
        return 0;
    else
        return max1;
}
  
// Driver Code
int main()
{
    string s = "synapse";
    cout << lenoflongestnonpalindrome(s) << "\n";
    return 0;
}

Java




// Java implementation of the above approach
import java.util.Arrays;
import java.lang.Math;
  
class GFG {
  
    // Function to find the length of the longest
    // substring
    public static int lenoflongestnonpalindrome(String s)
    {
        // initializing the variables
        int max1 = 1, len = 0;
        char[] new_str = s.toCharArray();
  
        for (int i = 0; i < new_str.length - 1; i++) {
            // checking palindrome of size 2
            // example: aa
            if (new_str[i] == new_str[i + 1])
                len = 0;
            // checking palindrome of size 3
            // example: aba
            else if (i > 0 && (new_str[i + 1] == new_str[i - 1]))
                len = 1;
            else // incrementing length of substring
                len++;
            max1 = Math.max(max1, len + 1); // finding maximum
        }
  
        // if there exits single character then
        // it is always palindrome
        if (max1 == 1)
            return 0;
        else
            return max1;
    }
  
    // Driver Code
    public static void main(String[] args)
    {
        String s = "synapse";
        System.out.println(lenoflongestnonpalindrome(s));
    }
}
  
// This code is contributed by princiraj1992

Python3




# Python3 implementation of the above approach 
  
# Function to find the length 
# of the longest substring 
def lenoflongestnonpalindrome(s): 
  
    # initializing the variables 
    max1, length = 1, 0
  
    for i in range(0, len(s) - 1): 
          
        # checking palindrome of 
        # size 2 example: aa 
        if s[i] == s[i + 1]: 
            length = 0
              
        # checking palindrome of 
        # size 3 example: aba 
        elif s[i + 1] == s[i - 1] and i > 0:
            length = 1
        else: # incrementing length of substring 
            length += 1
        max1 = max(max1, length + 1) # finding maximum 
  
    # If there exits single character 
    # then it is always palindrome 
    if max1 == 1
        return 0
    else:
        return max1 
  
# Driver Code 
if __name__ == "__main__":
  
    s = "synapse"
    print(lenoflongestnonpalindrome(s))
      
# This code is contributed by Rituraj Jain

C#




// C# implementation of the above approach 
using System;
      
class GFG 
{
  
    // Function to find the length of the longest
    // substring
    public static int lenoflongestnonpalindrome(String s)
    {
        // initializing the variables
        int max1 = 1, len = 0;
        char[] new_str = s.ToCharArray();
  
        for (int i = 0; i < new_str.Length - 1; i++) 
        {
            // checking palindrome of size 2
            // example: aa
            if (new_str[i] == new_str[i + 1])
                len = 0;
                  
            // checking palindrome of size 3
            // example: aba
            else if (i > 0 && (new_str[i + 1] == new_str[i - 1]))
                len = 1;
            else // incrementing length of substring
                len++;
            max1 = Math.Max(max1, len + 1); // finding maximum
        }
  
        // if there exits single character then
        // it is always palindrome
        if (max1 == 1)
            return 0;
        else
            return max1;
    }
  
    // Driver Code
    public static void Main(String[] args)
    {
        String s = "synapse";
        Console.WriteLine(lenoflongestnonpalindrome(s));
    }
}
  
// This code has been contributed by 29AjayKumar

PHP




<?php
// PHP implementation of the above approach 
  
// Function to find the length of the longest 
// substring 
function lenoflongestnonpalindrome($s
    // initializing the variables 
    $max1 = 1; $len = 0; 
  
    for ($i = 0; $i < strlen($s) - 1; $i++) 
    
        // checking palindrome of size 2 
        // example: aa 
        if ($s[$i] == $s[$i + 1]) 
            $len = 0; 
              
        // checking palindrome of size 3 
        // example: aba 
        else if ($s[$i + 1] == $s[$i - 1] && $i > 0) 
            $len = 1; 
        else // incrementing length of substring 
            $len++; 
        $max1 = max($max1, $len + 1); // finding maximum 
    
  
    // if there exits single character then 
    // it is always palindrome 
    if ($max1 == 1) 
        return 0; 
    else
        return $max1
  
// Driver Code 
$s = "synapse"
echo lenoflongestnonpalindrome($s), "\n"
  
// This code is contributed by AnkitRai01
  
?>
Output:
7



My Personal Notes arrow_drop_up
Recommended Articles
Page :