ArrayPlot[1-Boole[Outer[ResourceFunction["StringOverlapsQ"][{#1,#2}]&,#,#]&@Catenate[Table[ResourceFunction["StringTuples"]["AB",n],{n,2,5}]]]]
In[]:=
Out[]=
ArrayPlot[1-Boole[Outer[ResourceFunction["StringOverlapsQ"][{#1,#2}]&,#,#]&@Catenate[Table[ResourceFunction["StringTuples"]["AB",n],{n,2,6}]]]]
In[]:=
Out[]=
ArrayPlot[1-Boole[Outer[ResourceFunction["StringOverlapsQ"][{#1,#2}]&,#,#]&@Catenate[Table[ResourceFunction["StringTuples"]["ABC",n],{n,2,4}]]]]
In[]:=
Out[]=
Counts[Flatten[Outer[ResourceFunction["StringOverlapsQ"][{#1,#2}]&,#,#]&@Catenate[Table[ResourceFunction["StringTuples"]["ABC",n],{n,1,3}]]]]
In[]:=
True819,False702
Out[]=
Counts[Flatten[Outer[ResourceFunction["StringOverlapsQ"][{#1,#2}]&,#,#]&@Catenate[Table[ResourceFunction["StringTuples"]["AB",n],{n,1,3}]]]]
In[]:=
True140,False56
Out[]=
Table[ResourceFunction["GrayCode"][n],{n,15}]
In[]:=
{{1},{1,1},{1,0},{1,1,0},{1,1,1},{1,0,1},{1,0,0},{1,1,0,0},{1,1,0,1},{1,1,1,1},{1,1,1,0},{1,0,1,0},{1,0,1,1},{1,0,0,1},{1,0,0,0}}
Out[]=
StringJoin/@Partition[DeBruijnSequence[{"A","B"},4],4,1]
In[]:=
{AAAA,AAAB,AABA,ABAA,BAAB,AABB,ABBA,BBAB,BABA,ABAB,BABB,ABBB,BBBB}
Out[]=
ArrayPlot[1-Boole[Outer[ResourceFunction["StringOverlapsQ"][{#1,#2}]&,#,#]&[StringJoin/@Partition[DeBruijnSequence[{"A","B"},6],6,1]]]]
In[]:=
Out[]=
Length[%]
In[]:=
13
Out[]=
ListLinePlot[Table[FromDigits[ResourceFunction["GrayCode"][n],2],{n,100}]]
In[]:=
Out[]=

Combinations

Clear[OverlapCounts]
In[]:=
OverlapCounts[k_Integer,nmax_Integer,ct_Integer]:=Counts[Flatten[Outer[ResourceFunction["StringOverlapsQ"][{##}]&,##]&@@Table[Catenate[Table[ResourceFunction["StringTuples"][StringTake["ABCDE",k],n],{n,nmax}]],ct]]]
In[]:=
OverlapCounts[2,3,2]
In[]:=
True140,False56
Out[]=
Pairwise
OverlapCounts[2,3,3]
In[]:=
True1960,False784
Out[]=
Not pairwise
OverlapCounts[2,3,3]
In[]:=
True2408,False336
Out[]=
OverlapCounts[2,3,3]