# Generate all possible subset from a character array in MATLAB

6 views (last 30 days)
Sangeetha R on 30 Mar 2019
Answered: Walter Roberson on 30 Mar 2019
I need to generate all possible subset from a character array with reduced execution time. Actual input is of length '500' characters and maximum length of subset is limited to 20 characters.
For example:
input='ABCA';
output ='A', 'B', 'C', 'AB', 'BC', 'CA', 'ABC', 'BCA', 'ABCA'
Walter Roberson on 30 Mar 2019
Could you confirm that length(unique(input)) is 500? For example 500 Chinese ideographs? As opposed to length(input) being 500 but the number of unique being much smaller?
Sangeetha R on 30 Mar 2019
length(input) is 500

Sangeetha R on 30 Mar 2019
Edited: Sangeetha R on 30 Mar 2019
Answer that i found is given below,
tic
l=length(input);
begn=1;
count=1;
output_seq=cell(1000,1);%preallocating
for i=1:l
if(begn<=l)
[count,output_seq]=pep(begn,l,input,count,output_seq);
begn=begn+1;
end
end
output_unique=unique(output_seq);
toc
function [count,output_seq]=pep(b,l,input,count,output_seq)
for i=0:l
if(b+i-b<21)
if(b+i<=l)
p = input(b:b+i);
output_seq{count}=p;
count=count+1;
end
end
end
end

Walter Roberson on 30 Mar 2019
Consider
[S(1:end-2);
S(2:end-1);
S(3:end)].'
Now unique rows

### Categories

Find more on C Shared Library Integration in Help Center and File Exchange

R2018b

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!