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(); } |