Dada una string de minúsculas, encuentre la longitud de la substring más larga que no contiene ningún palíndromo como substring.
Ejemplos:
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
La idea es observar que si algún carácter forma un palíndromo, no puede ser incluido en ninguna substring. Entonces, en ese caso, la substring requerida se seleccionará antes o después de ese carácter que forma un palíndromo.
Por tanto, una solución sencilla es recorrer la string y, para cada carácter, comprobar si forma un palíndromo de longitud 2 o 3 con sus caracteres adyacentes. Si no es así, aumente la longitud de la substring; de lo contrario, reinicie la longitud de la substring a cero. Usando este enfoque, encuentre la longitud de la substring máxima.
A continuación se muestra la implementación del enfoque anterior:
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 ?>
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>
7
Publicación traducida automáticamente
Artículo escrito por Sairahul Jella y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA