Verifique que dos cadenas binarias se puedan hacer iguales intercambiando pares de caracteres desiguales

Verifique que dos cadenas binarias se puedan hacer iguales intercambiando pares de caracteres desiguales

Dadas dos cadenas binarias S1 y S2 de longitud NORTE. (1 ‚ȧ N ‚ȧ 105) la tarea es comprobar si es posible convertir la cadena S1 a
S2 haciendo lo siguiente tantas veces como desee:

  1. Seleccione dos √≠ndices cualesquiera yo y j (1 ‚ȧ yo) as√≠ que eso S1[i] es '0' y S1[j] es '1'.
  2. Para enga√Īar S1[i] Con S1[j].

Ejemplos:

Entrada: S1 = "100111", S2 = "111010"
salida: SI
Explicación:Intercambiar S.[2] y S.[3] con S.[4] y S.[6] respectivamente.

Entrada: S1 = "110100", S2 = "010101"
Salida: NO

Acercarse: Siga los pasos a continuación para resolver el problema:

  1. Compruebe que se incluye el n√ļmero de caracteres '0' y '1' las cadenas son iguales en ambos. Si esto no es cierto, es imposible transformar una cadena S1 en S2.
  2. Si el n√ļmero de caracteres es el mismo, pasemos al siguiente paso. Debido a la condici√≥n dada, es posible mover el '0' solo en Direcci√≥n de avance intercambiando con la letra '1' en la cadena S1.
  3. As√≠ que itera los caracteres de ambas cadenas y cuenta el n√ļmero de apariciones de '0' en ambas cadenas. Si en alg√ļn momento el n√ļmero de caracteres de '0' en la cadena S2 se vuelve estrictamente mayor que el n√ļmero de ocurrencias en la cadena S1, salga del bucle e imprima "NO".
  4. Cuando ambas cadenas se hayan iterado correctamente, imprima "SI".

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

C ++

 

#include <bits/stdc++.h>

using namespace std;

 

void check(string s1, string s2)

{

    

    int s1_0 = 0, s2_0 = 0;

 

    

    

    for (int i = 0; i < s1.size(); i++) {

 

        if (s1[i] == '0') {

            s1_0++;

        }

 

        if (s2[i] == '0') {

            s2_0++;

        }

    }

 

    

    if (s1_0 != s2_0) {

        cout << "NO" << endl;

        return;

    }

 

    else {

 

        int Count1 = 0, Count2 = 0;

 

        

        

        

        for (int i = 0; i < s1.size(); i++) {

 

            if (s1[i] == '0') {

                Count1++;

            }

 

            if (s2[i] == '0') {

                Count2++;

            }

 

            

            

            if (Count1 < Count2) {

                cout << "NO" << endl;

                return;

            }

        }

 

        cout << "YES" << endl;

    }

}

 

int main()

{

 

    string s1 = "100111";

    string s2 = "111010";

    check(s1, s2);

 

    s1 = "110100";

    s2 = "010101";

    check(s1, s2);

 

    return 0;

}

Complejidad temporal: EN)
Sala auxiliar : O (1)

¡Atención lectores! No dejes de estudiar ahora. Comience con todos los conceptos principales de DSA Curso autodidacta de DSA a un precio asequible para los estudiantes y son aptas para la industria.

Subir

Usamos cookies. Ver mas