Minimice el costo de voltear o intercambiar para equilibrar una string binaria

Dada una string binaria S de tamaño N (donde N es par), la tarea es encontrar el costo mínimo de equilibrar la string binaria dada cambiando uno de los diferentes caracteres adyacentes al costo de 1 unidad o intercambiando los caracteres en los índices i y j tales que (i < j) a costa de (j – i) unidad . Si es imposible equilibrar la string, se imprime “-1” .

Una string binaria está equilibrada si se puede reducir a una string vacía eliminando dos caracteres alternos consecutivos a la vez y luego concatenando los caracteres restantes.

Ejemplos:

Entrada: S = “110110”
Salida: 1
Explicación: Se realizan las siguientes operaciones:
Operación 1: Como los caracteres adyacentes en los índices 0 y 1 son diferentes, cambiar S[0] modifica S a “010110”. Costo = 1 .

Después de completar las operaciones anteriores, la string dada se equilibra, ya que se puede reducir a una string vacía eliminando dos caracteres alternos consecutivos.
Por lo tanto, el costo total es 1.

Entrada: S = “11100”
Salida: -1

Enfoque: El problema dado se puede resolver en base a las observaciones de que el cambio de los diferentes caracteres adyacentes es más óptimo que el uso del intercambio de caracteres y la posición de los 0 y los 1 en la string no importa. Siga los pasos a continuación para resolver el problema:

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

C++

// C++ program for the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to find the minimum cost
// to convert the given string into
// balanced string
void findMinimumCost(string s, int N)
{
 
    // Stores count of 1's and 0's in
    // the string
    int count_1 = 0, count_0 = 0;
 
    // Traverse the string
    for (int i = 0; i < N; i++) {
        if (s[i] == '1')
 
            // Increment count1
            count_1++;
        else
 
            // Increment count 0
            count_0++;
    }
 
    // Stores absolute difference of
    // counts of 0's and 1's
    int k = abs(count_0 - count_1);
 
    // If string consists of only
    // 0's and 1's
    if (count_1 == N || count_0 == N)
        cout << -1 << endl;
 
    // Print minimum cost
    else
        cout << k / 2 << endl;
}
 
// Driver Code
int main()
{
    string S = "110110";
    int N = S.length();
    findMinimumCost(S, N);
 
    return 0;
}

Java

// Java program for the above approach
import java.io.*;
import java.lang.*;
import java.util.*;
 
class GFG{
 
// Function to find the minimum cost
// to convert the given string into
// balanced string
static void findMinimumCost(String s, int N)
{
 
    // Stores count of 1's and 0's in
    // the string
    int count_1 = 0, count_0 = 0;
 
    // Traverse the string
    for (int i = 0; i < N; i++) {
        if (s.charAt(i) == '1')
 
            // Increment count1
            count_1++;
        else
 
            // Increment count 0
            count_0++;
    }
 
    // Stores absolute difference of
    // counts of 0's and 1's
    int k = Math.abs(count_0 - count_1);
 
    // If string consists of only
    // 0's and 1's
    if (count_1 == N || count_0 == N)
        System.out.println( -1);
 
    // Print minimum cost
    else
        System.out.println( k / 2);
}
 
// Driver Code
public static void main(String[] args)
{
     
    String S = "110110";
    int N = S.length();
    findMinimumCost(S, N);
}
}
// This code is contributed by code_hunt.

Python3

# Python3 program for the above approach
 
# Function to find the minimum cost
# to convert the given into
# balanced string
def findMinimumCost(s, N):
 
    # Stores count of 1's and 0's in
    # the string
    count_1, count_0 = 0, 0
 
    # Traverse the string
    for i in range(N):
        if (s[i] == '1'):
             
            # Increment count1
            count_1 += 1
        else:
             
            # Increment count 0
            count_0 += 1
 
    # Stores absolute difference of
    # counts of 0's and 1's
    k = abs(count_0 - count_1)
 
    # If consists of only
    # 0's and 1's
    if (count_1 == N or count_0 == N):
        print(-1)
 
    # Print the minimum cost
    else:
        print(k // 2)
 
# Driver Code
if __name__ == '__main__':
     
    S = "110110"
    N = len(S)
     
    findMinimumCost(S, N)
 
# This code is contributed by mohit kumar 29

C#

// C# program for the above approach
using System;
 
class GFG{
 
// Function to find the minimum cost
// to convert the given string into
// balanced string
static void findMinimumCost(String s, int N)
{
     
    // Stores count of 1's and 0's in
    // the string
    int count_1 = 0, count_0 = 0;
 
    // Traverse the string
    for(int i = 0; i < N; i++)
    {
        if (s[i] == '1')
         
            // Increment count1
            count_1++;
        else
 
            // Increment count 0
            count_0++;
    }
 
    // Stores absolute difference of
    // counts of 0's and 1's
    int k = Math.Abs(count_0 - count_1);
 
    // If string consists of only
    // 0's and 1's
    if (count_1 == N || count_0 == N)
        Console.WriteLine(-1);
 
    // Print minimum cost
    else
        Console.WriteLine(k / 2);
}
 
// Driver Code
static public void Main()
{
    String S = "110110";
    int N = S.Length;
     
    findMinimumCost(S, N);
}
}
 
// This code is contributed by Dharanendra L V.

Javascript

<script>
 
// JavaScript program for the above approach
 
// Function to find the minimum cost
// to convert the given string into
// balanced string
function findMinimumCost(s, N)
{
  
    // Stores count of 1's and 0's in
    // the string
    let count_1 = 0, count_0 = 0;
  
    // Traverse the string
    for (let i = 0; i < N; i++) {
        if (s[i] == '1')
  
            // Increment count1
            count_1++;
        else
  
            // Increment count 0
            count_0++;
    }
  
    // Stores absolute difference of
    // counts of 0's and 1's
    let k = Math.abs(count_0 - count_1);
  
    // If string consists of only
    // 0's and 1's
    if (count_1 == N || count_0 == N)
        document.write( -1);
  
    // Print minimum cost
    else
        document.write( k / 2);
}
 
// Driver Code
 
    let S = "110110";
    let N = S.length;
    findMinimumCost(S, N);
   
</script>              
Producción: 

1

 

Complejidad temporal: O(N)
Espacio auxiliar: O(1)

Publicación traducida automáticamente

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