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

Combinations

In[]:=
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]
Out[]=
True140,False56
Pairwise
In[]:=
OverlapCounts[2,3,3]
Out[]=
True1960,False784
Not pairwise
In[]:=
OverlapCounts[2,3,3]
Out[]=
True2408,False336
OverlapCounts[2,3,3]