833. Find And Replace in String
1 //从右往左 先排序一下 然后右到左进行替换 这样替换位置之前的index不会变 2 //注意一下Comparator的写法 3 class Solution { 4 public String findReplaceString(String S, int[] indexes, String[] sources, String[] targets) { 5 if(indexes.length == 0) return S; 6 StringBuilder sb = new StringBuilder(S); 7 int[][] record = new int[indexes.length][2]; 8 for(int i = 0; i < indexes.length; i++) { 9 record[i][0] = indexes[i]; 10 record[i][1] = i; 11 } 12 Arrays.sort(record, new Comparator<int[]>(){ 13 @Override 14 public int compare(int[] a, int[] b) { 15 return a[0]-b[0]; 16 } 17 }); 18 19 for(int i = record.length - 1; i >= 0; i--) { 20 if(S.indexOf(sources[record[i][1]], record[i][0]) == record[i][0]) { 21 sb.replace(record[i][0], record[i][0] + sources[record[i][1]].length(), targets[record[i][1]]); 22 } 23 24 } 25 26 27 return sb.toString(); 28 29 } 30 } 31 32 //HashMap 符合条件的位置和indexes的坐标i房间hashmap 然后一个位置一个位置从左向右加过去 33 class Solution { 34 public String findReplaceString(String S, int[] indexes, String[] sources, String[] targets) { 35 if(indexes.length == 0) return S; 36 StringBuilder sb = new StringBuilder(); 37 HashMap<Integer, Integer> map = new HashMap<>(); 38 for(int i = 0; i < indexes.length; i++) { 39 if(S.startsWith(sources[i], indexes[i])) { 40 map.put(indexes[i], i); 41 } 42 } 43 44 for(int i = 0; i < S.length(); i++) { 45 if(map.containsKey(i)) { 46 sb.append(targets[map.get(i)]); 47 i = i + sources[map.get(i)].length() - 1; 48 }else { 49 sb.append(S.charAt(i)); 50 } 51 } 52 return sb.toString(); 53 54 } 55 }