1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| class Solution { fun findReplaceString(s: String, indices: IntArray, sources: Array<String>, targets: Array<String>): String { quickSort(indices, sources, targets, 0, indices.size - 1) var shift = 0 var str = s for (i in indices.indices) { if (str.indexOf(sources[i], indices[i] + shift) != indices[i] + shift) { continue } str = str.substring(0, indices[i] + shift) + targets[i] + str.substring(indices[i] + shift + sources[i].length) shift += targets[i].length - sources[i].length } return str }
fun quickSort(indices: IntArray, sources: Array<String>, targets: Array<String>, beginIndex: Int, endIndex: Int) { if (beginIndex >= endIndex) return val mid = indices[beginIndex] var left = beginIndex var right = endIndex while (left < right) { while (indices[right] > mid && left < right) { right-- } if (left < right) swap(indices, sources, targets, left++, right) while (indices[left] < mid && left < right) { left++ } if (left < right) swap(indices, sources, targets, left, right--) }
quickSort(indices, sources, targets, beginIndex, left - 1) quickSort(indices, sources, targets, left + 1, endIndex) }
fun swap(indices: IntArray, sources: Array<String>, targets: Array<String>, a: Int, b: Int) { swap(indices, a, b) swap(sources, a, b) swap(targets, a, b) }
fun swap(arr: IntArray, a: Int, b: Int) { val tmp = arr[a] arr[a] = arr[b] arr[b] = tmp }
fun swap(arr: Array<String>, a: Int, b: Int) { val tmp = arr[a] arr[a] = arr[b] arr[b] = tmp } }
|