Substring palindrómica de longitud máxima tal que comienza y termina con el carácter dado

Dada una string str y un carácter ch , la tarea es encontrar la substring palindrómica más larga de str tal que comience y termine con el carácter ch dado .
Ejemplos: 
 

Entrada: str = “lapqooqpqpl”, ch = ‘p’ 
Salida:
“pqooqp” es la substring palindrómica de longitud máxima 
que comienza y termina con ‘p’.
Entrada: str = “geeksforgeeks”, ch = ‘k’ 
Salida:
“k” es la substring válida. 
 

Enfoque: para cada posible par de índices (i, j) tal que str[i] = str[j] = ch , compruebe si la substring str[i…j] es palíndromo o no. Para todos los palíndromos encontrados, almacene la longitud del palíndromo más largo encontrado hasta el momento.
A continuación se muestra la implementación del enfoque anterior: 
 

C++

// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
 
// Function that returns true if
// str[i...j] is a palindrome
bool isPalindrome(string str, int i, int j)
{
    while (i < j) {
        if (str[i] != str[j])
            return false;
        i++;
        j--;
    }
    return true;
}
 
// Function to return the length of the
// longest palindromic sub-string such that
// it starts and ends with the character ch
int maxLenPalindrome(string str, int n, char ch)
{
    int maxLen = 0;
 
    for (int i = 0; i < n; i++) {
 
        // If current character is
        // a valid starting index
        if (str[i] == ch) {
 
            // Instead of finding the ending index from
            // the beginning, find the index from the end
            // This is because if the current sub-string
            // is a palindrome then there is no need to check
            // the sub-strings of smaller length and we can
            // skip to the next iteration of the outer loop
            for (int j = n - 1; j >= i; j--) {
 
                // If current character is
                // a valid ending index
                if (str[j] == ch) {
 
                    // If str[i...j] is a palindrome then update
                    // the length of the maximum palindrome so far
                    if (isPalindrome(str, i, j)) {
                        maxLen = max(maxLen, j - i + 1);
                        break;
                    }
                }
            }
        }
    }
    return maxLen;
}
 
// Driver code
int main()
{
    string str = "lapqooqpqpl";
    int n = str.length();
    char ch = 'p';
 
    cout << maxLenPalindrome(str, n, ch);
 
    return 0;
}

Java

// Java implementation of the approach
class GFG
{
     
    // Function that returns true if
    // str[i...j] is a palindrome
    static boolean isPalindrome(String str,
                               int i, int j)
    {
        while (i < j)
        {
            if (str.charAt(i) != str.charAt(j))
            {
                return false;
            }
            i++;
            j--;
        }
        return true;
    }
 
    // Function to return the length of the
    // longest palindromic sub-string such that
    // it starts and ends with the character ch
    static int maxLenPalindrome(String str, int n, char ch)
    {
        int maxLen = 0;
 
        for (int i = 0; i < n; i++)
        {
 
            // If current character is
            // a valid starting index
            if (str.charAt(i) == ch)
            {
 
                // Instead of finding the ending index from
                // the beginning, find the index from the end
                // This is because if the current sub-string
                // is a palindrome then there is no need to check
                // the sub-strings of smaller length and we can
                // skip to the next iteration of the outer loop
                for (int j = n - 1; j >= i; j--)
                {
 
                    // If current character is
                    // a valid ending index
                    if (str.charAt(j) == ch)
                    {
 
                        // If str[i...j] is a palindrome then update
                        // the length of the maximum palindrome so far
                        if (isPalindrome(str, i, j))
                        {
                            maxLen = Math.max(maxLen, j - i + 1);
                            break;
                        }
                    }
                }
            }
        }
        return maxLen;
    }
 
    // Driver code
    public static void main(String[] args)
    {
        String str = "lapqooqpqpl";
        int n = str.length();
        char ch = 'p';
 
        System.out.println(maxLenPalindrome(str, n, ch));
    }
}
 
// This code is contributed by Princi Singh

Python3

# Python implementation of the approach
 
# Function that returns true if
# str[i...j] is a palindrome
def isPalindrome(str, i, j):
    while (i < j):
        if (str[i] != str[j]):
            return False;
        i+=1;
        j-=1;
    return True;
 
 
# Function to return the length of the
# longest palindromic sub-string such that
# it starts and ends with the character ch
def maxLenPalindrome(str, n, ch):
    maxLen = 0;
 
    for i in range(n):
 
        # If current character is
        # a valid starting index
        if (str[i] == ch):
 
            # Instead of finding the ending index from
            # the beginning, find the index from the end
            # This is because if the current sub-string
            # is a palindrome then there is no need to check
            # the sub-strings of smaller length and we can
            # skip to the next iteration of the outer loop
            for j in range(n-1,i+1,-1):
                # If current character is
                # a valid ending index
                if (str[j] == ch):
 
                    # If str[i...j] is a palindrome then update
                    # the length of the maximum palindrome so far
                    if (isPalindrome(str, i, j)):
                        maxLen = max(maxLen, j - i + 1);
                        break;
 
    return maxLen;
 
# Driver code
str = "lapqooqpqpl";
n = len(str);
ch = 'p';
 
print(maxLenPalindrome(str, n, ch));
     
# This code is contributed by 29AjayKumar

C#

// C# implementation of the approach
using System;
 
class GFG
{
     
    // Function that returns true if
    // str[i...j] is a palindrome
    static bool isPalindrome(string str,
                            int i, int j)
    {
        while (i < j)
        {
            if (str[i] != str[j])
            {
                return false;
            }
            i++;
            j--;
        }
        return true;
    }
 
    // Function to return the length of the
    // longest palindromic sub-string such that
    // it starts and ends with the character ch
    static int maxLenPalindrome(string str, int n, char ch)
    {
        int maxLen = 0;
 
        for (int i = 0; i < n; i++)
        {
 
            // If current character is
            // a valid starting index
            if (str[i] == ch)
            {
 
                // Instead of finding the ending index from
                // the beginning, find the index from the end
                // This is because if the current sub-string
                // is a palindrome then there is no need to check
                // the sub-strings of smaller length and we can
                // skip to the next iteration of the outer loop
                for (int j = n - 1; j >= i; j--)
                {
 
                    // If current character is
                    // a valid ending index
                    if (str[j] == ch)
                    {
 
                        // If str[i...j] is a palindrome then update
                        // the length of the maximum palindrome so far
                        if (isPalindrome(str, i, j))
                        {
                            maxLen = Math.Max(maxLen, j - i + 1);
                            break;
                        }
                    }
                }
            }
        }
        return maxLen;
    }
 
    // Driver code
    public static void Main()
    {
        string str = "lapqooqpqpl";
        int n = str.Length;
        char ch = 'p';
 
        Console.WriteLine(maxLenPalindrome(str, n, ch));
    }
}
 
// This code is contributed by AnkitRai01

Javascript

<script>
      // JavaScript implementation of the approach
      // Function that returns true if
      // str[i...j] is a palindrome
      function isPalindrome(str, i, j) {
        while (i < j) {
          if (str[i] !== str[j]) {
            return false;
          }
          i++;
          j--;
        }
        return true;
      }
 
      // Function to return the length of the
      // longest palindromic sub-string such that
      // it starts and ends with the character ch
      function maxLenPalindrome(str, n, ch) {
        var maxLen = 0;
 
        for (var i = 0; i < n; i++) {
          // If current character is
          // a valid starting index
          if (str[i] === ch) {
            // Instead of finding the ending index from
            // the beginning, find the index from the end
            // This is because if the current sub-string
            // is a palindrome then there is no need to check
            // the sub-strings of smaller length and we can
            // skip to the next iteration of the outer loop
            for (var j = n - 1; j >= i; j--) {
              // If current character is
              // a valid ending index
              if (str[j] === ch) {
                // If str[i...j] is a palindrome then update
                // the length of the maximum palindrome so far
                if (isPalindrome(str, i, j)) {
                  maxLen = Math.max(maxLen, j - i + 1);
                  break;
                }
              }
            }
          }
        }
        return maxLen;
      }
 
      // Driver code
      var str = "lapqooqpqpl";
      var n = str.length;
      var ch = "p";
 
      document.write(maxLenPalindrome(str, n, ch));
    </script>
Producción: 

6

 

Time Complexity: O(n3)
Space Complexity: O(1)

Publicación traducida automáticamente

Artículo escrito por prajmsidc y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *