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.
Para obtener cantidades mínimas de 1 necesitamos cada 1 a manejar hasta 0 como sea posible lo que significa que hay que repetir 010
cantidad máxima de veces. Así que podemos comenzar a reemplazar ceros con el 010
de la izquierda
0000000000
↓↓↓↓↓↓↓↓↓
010010010x <- here you can't place another 010 and we have one extra place to fill
Si 010
no 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 0
aquí? Vamos a ver: 010010010x
se convertiría 0100100100
?
Es resultado válido? NO porque la última cero no tiene ningún 1
cerca de él. Así que no podemos usar 0
lo que nos deja con 1
igual 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 00
porque la última 0
no 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 01
o 10
que se suman uno 1
, mientras que 11
añade dos 1
por 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.