def find_starts(DNA: str, pat: str) -> list:
    """Find all start indexes of a substring

    :param DNA: the longer string to search in
    :type DNA: str
    :param pattern: the substring to search for
    :type pattern: str
    :returns: all indexes where pattern starts in DNA
    :rtype: list
    """
    
    if not DNA:
        raise ValueError('Cannot search in empty string')
    if not pat:
        raise ValueError('Cannot search for empty string')
    pat_len = len(pat)
    DNA_len = len(DNA)
    if pat_len > DNA_len:
        return []
    starts = []
    # only search possible starting positions
    for i in range(DNA_len - pat_len + 1):
        if DNA[i:i + pat_len] == pat:
            starts.append(i)
    return starts