Longest common subsequence (LCS) for multiple strings
Conventions

It's highly recommended to have all imports at the top of your file.
It's not nice for readers to have a different environment than expected.

It's also better to be safe than sorry, so you may want to wrap your global code in a if __name__ == '__main__':.

One-line docstrings by convention have both """ on the same line.
You must be thinking of multi-line docstrings, where the last """ goes on a new line.

Code

checkall

Python has some strong readability conventions.
For example, in checkall you use the not operator after the equals operator.
This is strange, as you could just use the not equals operator.
But in Python if a != 0: is always true and false every time if a: is.
And so it's better to just use if a.

# Using two operators rather than one
if not a == 0:
    ...

# Comparing to value (twice).
if a != 0:
    ...

# What you want to be doing:
if a:
    ...




I like the idea of writing declarative statements from functional programming,
which can really help readability in checkall.

If we were to say what the algorithm is:
Go through the list of strings, if any of them after going through check are true return false, otherwise return true.

Which can be converted to:

def checkall(strings, seq):
    return not any(check(x, seq) for x in strings)


check

A bit of a 'out there' one, even though it's harder to think backward in algorithms, or at least for me.
Changing check to run backwards can improve readability.
Rather than doing n &lt; len(...) you can just do n &gt;= 0.

It's not that big a difference, so you may not want to think about doing it.
But it will save a few cycles on all the lens.

mlcs

poor variable names such as s, make reading a little harder, s is short for string, but could be super, special or soup.
It's much easier to comprehend enumerate(string). In changing it it will also not be hidden in the other one letter variables.

this lead to me not quickly understanding what you are doing in the bits after candidates.



There are other problems, candidates can be put in the for loop, rather than as a function. And you should try to reduce the 8 for-loops that the function has.