Transformar una cadena a una cadena basada en una condición

Zak Zak:

Como entrada, tengo un objeto de cadena que contiene sólo '0'.

Ejemplo de la entrada String word = "00000".

La pregunta es transformar esta cadena a otra cadena como una salida.

La transformación es reemplazar algunos '0' por '1' en algunas posiciones específicas que resultados en cada '0' es adyacente a al menos un '1'.

algunos ejemplos:

input     |    output
0000          0101
00000         01001
000000        010010
0000000       0100101
00000000      01001010

Como podemos ver, las salidas cumplen la condición, todos los '0' es adyacente a por lo menos un '1'.

La segunda condición es que hay que utilizar el número de minutos de '1'.

Después de algún trabajo me di cuenta de que podemos conocer el número mínimo de '1' que debe sustituir a los valores 0.

La fórmula está representado por el método getMinNumber (palabra String).

Esto es lo que he hecho.

  public class TestUtilities {

    public static void main( String[] args ) {

        String [] words ={"0000","00000","000000","0000000"} ;
        for (String str :words) {
            System.out.println(transform(str));
        }
    }
    private static String  transform( String word ) {
        int min =  getMinNumber(word);
        //////
        //Some processing Here  
        /////
        return "";
    }

    public static int getMinNumber(String word) {
        int min;
        if (word.length() % 3 == 0) {
            min = word.length() / 3;
        } else {
            min = (word.length() / 3) + 1;
        }
        return min;
    }
}

Como se muestra Salí de la parte de procesamiento porque baremo no encuentro el algoritmo más fuerte. Normalmente yo debería reemplazar a uno cada tres 0 0, pero dosen't de trabajo para cada palabra.

Estoy buscando una solución que puede procesar cualquier palabra.

Pshemo:

Para obtener cantidades mínimas de 1 necesitamos cada 1 a manejar hasta 0 como sea posible lo que significa que hay que repetir 010cantidad máxima de veces. Así que podemos comenzar a reemplazar ceros con el 010de la izquierda

0000000000
↓↓↓↓↓↓↓↓↓
010010010x   <- here you can't place another 010 and we have one extra place to fill

Si 010no se llenó número completo Esto significa que necesitamos, ya sea uno o dos dígitos más.

¿Qué debemos hacer si es un dígito? Se puede utilizar 0aquí? Vamos a ver: 010010010xse convertiría 0100100100?
Es resultado válido? NO porque la última cero no tiene ningún 1cerca de él. Así que no podemos usar 0lo que nos deja con 1igual 0100100101.

Así que si tenemos un dígito más que lo reemplacemos con 1.

Ahora, ¿qué sucede cuando tenemos dos dígitos para relleno, como 010010010xx? No podemos usar 00porque la última 0no tendría ningún lado 1.

  • Podemos usar 01? SÍ: porque vamos a conseguir todas tienen 0 1 adyacentes01001001001
  • Podemos usar 10? SÍ: porque vamos a conseguir y aquí también todas tienen 0 1 adyacentes01001001010

¿Hay que revisar 11? No, porque ya podemos utilizar 01o 10que se suman uno 1, mientras que 11añade dos 1por lo que ese resultado no contendría cantidad mínima de 1.


Voy a dejar escribir código con el que se enfoque en su caso.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=118062&siteId=1
Recomendado
Clasificación