private static List<String> getEtapeIntermediare(char[] source, char[] target, int[][] positionMinimum) {

        List<Operation> operations = getOperations(source, target, positionMinimum);

        List<String> etapes = new ArrayList<>();

        char[] temp = new char[Math.max(source.length, target.length)];

        System.arraycopy(target, 0, temp, 0, target.length);

        int decalage = 0;

        Operation op;

        for (int k = 0; k < operations.size(); k++) {

            op = operations.get(k);

            switch (op.operateur) {
                case INSERT:
                    for (int i = temp.length - 1; i > decalage; i--) {
                        temp[i] = temp[i - 1];
                    }
                    temp[decalage] = op.operandeG;
                    etapes.add((new String(temp)).toLowerCase());
                    decalage++;
                    break;
                case DELETE:
                    for (int i = decalage; i < temp.length - 1; i++) {
                        temp[i] = temp[i + 1];
                    }
                    temp[temp.length - 1] = '\u0000';
                    etapes.add((new String(temp)).toLowerCase());
                    break;
                case SUBSTITUTION:
                    if (!op.operandeD.equals(op.operandeG)) {
                        temp[decalage] = op.operandeG;
                        etapes.add((new String(temp)).toLowerCase());
                    } else {

                    }
                    decalage++;
                    break;
                default:
                    //exception
                    break;
            }
        }

        if (etapes.size() > 0) {
            etapes.remove(etapes.size() - 1);
        }

        return etapes;
    }