Categorías
Algorithms

LeetCode – Buscar y reemplazar en cadena (Java)

Para alguna cadena S, realizaremos algunas operaciones de reemplazo que reemplazan grupos de letras con otras nuevas (no necesariamente del mismo tamaño).

Cada operación de reemplazo tiene 3 parámetros: un índice inicial i, una palabra fuente x y una palabra objetivo y. La regla es que si x comienza en la posición i en la cadena original S, entonces reemplazaremos esa ocurrencia de x con y. Si no, no hacemos nada.

Por ejemplo, si tenemos S = «abcd» y tenemos alguna operación de reemplazo i = 2, x = «cd», y = «ffff», debido a que «cd» comienza en la posición 2 en la cadena original S, lo haremos reemplácelo con «ffff».

Solución Java

public String findReplaceString(String S, int[] indexes, String[] sources, String[] targets) {
    StringBuilder sb = new StringBuilder();
    TreeMap<Integer, String[]> map = new TreeMap<>();
    for (int i = 0; i < indexes.length; i++) {
        map.put(indexes[i], new String[]{sources[i], targets[i]});
    }
 
    int prev = 0;
 
    for (Map.Entry<Integer, String[]> entry : map.entrySet()) {
        int startIndex = entry.getKey();
        int endIndex = startIndex + entry.getValue()[0].length();
 
        if (prev != startIndex) {
            sb.append(S.substring(prev, startIndex));
        }
 
        String org = S.substring(startIndex, endIndex);
        if (org.equals(entry.getValue()[0])) {
            sb.append(entry.getValue()[1]);
            prev = endIndex;
        } else {
            sb.append(org);
            prev = endIndex;
        }
 
    }
 
    if (prev < S.length()) {
        sb.append(S.substring(prev));
    }
 
    return sb.toString();
}

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *