Open In App

Length of the longest substring that do not contain any palindrome

Last Updated : 18 Oct, 2022
Improve
Improve
Like Article
Like
Save
Share
Report

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, the 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 it does not, then increase the length of the 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 exists 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
 
?>


Javascript




<script>
 
// JavaScript implementation of the above approach
 
// Function to find the length of the longest
// substring
function lenoflongestnonpalindrome(s)
{
    // initializing the variables
    let max1 = 1, len = 0;
 
    for (let 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 = 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
 
    let s = "synapse";
    document.write(lenoflongestnonpalindrome(s) + "<br>");
     
 
//This code is contributed by Manoj
</script>


Output: 

7

 

Time complexity: O(n) where n is length of input string

Auxiliary Space: O(1)



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads