用startsWith可以判断是否有重复
class Solution {
public String findReplaceString(String s, int[] indices, String[] sources, String[] targets) {
//将indices数组进行生序排列
//boxed是装箱,封装成Interger, sorted是排序,传入一个比较器(i是下标,给一个下标将它转换成indices[i]并用这个数排序)
//这个order实际上是下标的排序,存储的只是下标而不是indices里的值
int[] orders = IntStream.range(0, indices.length).boxed().sorted(Comparator.comparingInt(i -> indices[i])).mapToInt(i -> i).toArray();
//用来存储上一个位置
int preIndex = 0;
int length = s.length();
StringBuilder builder = new StringBuilder();
for (int i : orders) {
int index = indices[i];
//每一个index都是要进行比较的位置,现将要比较的位置前一个位置加入到builder
builder.append(s,preIndex,index);
//判断从index的位置是否存在重复
//用startsWith来判断是否有重复,index是开始比较的位置
if (s.startsWith(sources[i],index)){
builder.append(targets[i]);
//这里添加了,preIndex也要添加后的位置,跳到比较的下一位
preIndex = index + sources[i].length();
}
//如果没有重复
else {
preIndex = index;
}
}
//注意这里还要将剩下的加入,因为知道最后比较的位置
if (preIndex < length)
builder.append(s.substring(preIndex));
return builder.toString();
}
}