My first thought would be to pass over the DNA-string many times.
The first pass would look exclusively for 'full' matches, the 2nd would look for the '1 mismatches', etc.
On each pass, replace the '(mis)match' with a placeholder (single character) to keep the integrity of the remaining portions.
However, the order in which you check matches will have a bearing on the result.
For example, suppose you have a DNA-string 'ACGTGATC', and you want to match two different strings 'CG' and 'GT' against it.
That is, suppose you check for 'CG' first ...
'CG' matches 'ACGTGATC' leaving 'AXTGATC'
'GT' now doesn't match.
But, if you check for 'GT' first ...
'GT' matches 'ACGTGATC' leaving 'ACXGATC'
'GT' now doesn't match.
I'd be really interested in trying to help you do this, but I keep coming up with questions. It might be easier to do this by email.