from typing import List
import difflib


def get_list_difference(list1: List[str], list2: List[str]) -> List[str]:
    """
    Return list of elements that help turn list1 into list2.

    This should be a "minimal" list of differences based on changing one list into the other.

    >>> get_list_difference(["a", "b"], ["b", "a"])
    ['b']
    >>> get_list_difference(["a", "b"], ["a", "c", "b"])
    ['c']
    >>> get_list_difference(["a", "b", "c", "d", "e"], ["a", "c", "b", "e"])
    ['c', 'd']

    The last list happens because the matcher asks to insert 'c', then delete 'c' and 'd' later.
    """
    diff = set()
    matcher = difflib.SequenceMatcher(None, list1, list2)  # None means skip junk detection
    for code, left1, right1, left2, right2 in matcher.get_opcodes():
        if code != "equal":
            diff.update(list1[left1:right1])
            diff.update(list2[left2:right2])
    return sorted(diff)