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++ 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 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 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# 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 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 ?> |
<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> |
7
Time complexity: O(n) where n is length of input string
Auxiliary Space: O(1)