Reemplazos mínimos tales que ninguna substring palindrómica de longitud superior a 1 esté presente en la string dada

Dada una string str que consta de caracteres en minúsculas, la tarea es modificar la string de modo que no contenga ninguna substring palindrómica de longitud superior a 1 mediante el reemplazo mínimo de caracteres.

Ejemplos:

Entrada: str = “bbbbbbb”
Salida: 4
La string se puede modificar a “bacbacb” reemplazando 4 caracteres.

Entrada: str = «geeksforgeeks»
Salida: 2

Acercarse:

Para resolver el problema, la idea es que, si existe un palíndromo de longitud mayor que 3, entonces existe un palíndromo de longitud 2 o 3. Por lo tanto, elimine con avidez todos los palíndromos de longitud 2 o 3. Siga los pasos a continuación para resolver el problema:

  • Inicialice una variable, digamos change , para almacenar el número requerido de reemplazos.
  • Iterar sobre los caracteres de la string dada y realizar los siguientes pasos:
    • Si el carácter en el índice actual es el mismo que el carácter en el siguiente índice, entonces incremente el cambio en 1 .
    • De lo contrario, verifique si el carácter en el índice anterior es el mismo que el carácter en el índice siguiente, es decir, hay una substring palindrómica de longitud 3 . Por lo tanto, incrementa el cambio en 1.

A continuación se muestra la implementación del enfoque anterior:

C++

// C++ Program to implement
// the above approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to count the changes required such
// that no palindromic substring of length
// exceeding 1 is present in the string
int maxChange(string str)
{
 
    // Base Case
    if (str.size() <= 1) {
        return 0;
    }
 
    // Stores the count
    int minChanges = 0;
 
    // Iterate over the string
    for (int i = 0; i < str.size() - 1; i++) {
 
        // Palindromic Substring of Length 2
        if (str[i] == str[i + 1]) {
 
            // Replace the next character
            str[i + 1] = 'N';
 
            // Increment changes
            minChanges += 1;
        }
        // Palindromic Substring of Length 3
        else if (i > 0 && str[i - 1] == str[i + 1]) {
 
            // Replace the next character
            str[i + 1] = 'N';
            // Increment changes
            minChanges += 1;
        }
    }
 
    return minChanges;
}
 
// Driver Code
int main()
{
    string str = "bbbbbbb";
    cout << maxChange(str);
    return 0;
}

Java

// Java Program to implement
// the above approach
import java.util.*;
class GFG
{
 
// Function to count the changes required such
// that no palindromic subString of length
// exceeding 1 is present in the String
static int maxChange(char []str)
{
 
    // Base Case
    if (str.length <= 1)
    {
        return 0;
    }
 
    // Stores the count
    int minChanges = 0;
 
    // Iterate over the String
    for (int i = 0; i < str.length - 1; i++)
    {
 
        // Palindromic SubString of Length 2
        if (str[i] == str[i + 1])
        {
 
            // Replace the next character
            str[i + 1] = 'N';
 
            // Increment changes
            minChanges += 1;
        }
       
        // Palindromic SubString of Length 3
        else if (i > 0 && str[i - 1] == str[i + 1])
        {
 
            // Replace the next character
            str[i + 1] = 'N';
           
            // Increment changes
            minChanges += 1;
        }
    }
    return minChanges;
}
 
// Driver Code
public static void main(String[] args)
{
    String str = "bbbbbbb";
    System.out.print(maxChange(str.toCharArray()));
}
}
 
// This code is contributed by shikhasingrajput

Python3

# Python3 Program to implement
# the above approach
 
# Function to count the changes required such
# that no palindromic subof length
# exceeding 1 is present in the string
def maxChange(str):
    str = [i for i in str]
    if (len(str) <= 1):
        return 0
 
    # Stores the count
    minChanges = 0
 
    # Iterate over the string
    for i in range(len(str) - 1):
 
        # Palindromic Subof Length 2
        if (str[i] == str[i + 1]):
 
            # Replace the next character
            str[i + 1] = 'N'
 
            # Increment changes
            minChanges += 1
             
        # Palindromic Subof Length 3
        elif (i > 0 and str[i - 1] == str[i + 1]):
 
            # Replace the next character
            str[i + 1] = 'N'
             
            # Increment changes
            minChanges += 1
    return minChanges
 
# Driver Code
if __name__ == '__main__':
    str = "bbbbbbb"
    print (maxChange(str))
 
# This code is contributed by mohit kumar 29.

C#

// C# Program to implement
// the above approach
using System;
 
public class GFG
{
 
// Function to count the changes required such
// that no palindromic subString of length
// exceeding 1 is present in the String
static int maxChange(char []str)
{
 
    // Base Case
    if (str.Length <= 1)
    {
        return 0;
    }
 
    // Stores the count
    int minChanges = 0;
 
    // Iterate over the String
    for (int i = 0; i < str.Length - 1; i++)
    {
 
        // Palindromic SubString of Length 2
        if (str[i] == str[i + 1])
        {
 
            // Replace the next character
            str[i + 1] = 'N';
 
            // Increment changes
            minChanges += 1;
        }
       
        // Palindromic SubString of Length 3
        else if (i > 0 && str[i - 1] == str[i + 1])
        {
 
            // Replace the next character
            str[i + 1] = 'N';
           
            // Increment changes
            minChanges += 1;
        }
    }
    return minChanges;
}
 
// Driver Code
public static void Main(String[] args)
{
    String str = "bbbbbbb";
    Console.Write(maxChange(str.ToCharArray()));
}
}
 
  
 
// This code contributed by shikhasingrajput

Javascript

<script>
      // JavaScript Program to implement
      // the above approach
      // Function to count the changes required such
      // that no palindromic subString of length
      // exceeding 1 is present in the String
      function maxChange(str) {
        // Base Case
        if (str.length <= 1) {
          return 0;
        }
 
        // Stores the count
        var minChanges = 0;
 
        // Iterate over the String
        for (var i = 0; i < str.length - 1; i++) {
          // Palindromic SubString of Length 2
          if (str[i] === str[i + 1]) {
            // Replace the next character
            str[i + 1] = "N";
 
            // Increment changes
            minChanges += 1;
          }
 
          // Palindromic SubString of Length 3
          else if (i > 0 && str[i - 1] === str[i + 1]) {
            // Replace the next character
            str[i + 1] = "N";
 
            // Increment changes
            minChanges += 1;
          }
        }
        return minChanges;
      }
 
      // Driver Code
      var str = "bbbbbbb";
      document.write(maxChange(str.split("")));
    </script>
Producción: 

4

 

Complejidad de tiempo: O(N), ya que estamos usando un bucle para atravesar N veces, por lo que nos costará O(N) tiempo 
Espacio auxiliar: O(1), ya que no estamos usando ningún espacio adicional.

Publicación traducida automáticamente

Artículo escrito por architaggarwal023 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 *