Creating all possible combination of a letter/string

22 visualizaciones (últimos 30 días)
Rahul J Hirur
Rahul J Hirur el 17 de Jun. de 2020
Editada: Cris LaPierre el 7 de Jul. de 2021
Hello everyone,
I was wondering is there a way to create all possible combination of a word in terms of uppercase and lowercase.
Say there is char
dem_a='ABC'
I need output something like
OUTPUT= ['ABC', 'ABc', 'AbC', 'aBC', 'Abc', 'aBc', 'abC', 'abc'];
Is there anyway by which I can achieve this in matlab?

Respuesta aceptada

James Tursa
James Tursa el 17 de Jun. de 2020
Editada: James Tursa el 17 de Jun. de 2020
One way to create a matrix of these character strings:
dem_a='ABC'; % assume starting string is all upper
n = numel(dem_a);
result = repmat(dem_a,2^n,1);
mask = dec2bin((0:(2^n-1))') == '1';
result(mask) = result(mask) + ('a'-'A');
or that last line could be
result(mask) = lower(result(mask));
  2 comentarios
Rahul J Hirur
Rahul J Hirur el 18 de Jun. de 2020
Thank you.
One tiny thing though,
dem_a if it has lowercase letter. It will throw some garbage in.
It can be solved using upper() function
James Tursa
James Tursa el 18 de Jun. de 2020
Yes, e.g.,
result = repmat(upper(dem_a),2^n,1);

Iniciar sesión para comentar.

Más respuestas (1)

Cris LaPierre
Cris LaPierre el 17 de Jun. de 2020
There is no built-in function for this, but you can use the capabilitied of MATLAB to find the answer. Here's one way.
t = 'ABCabc';
% All possible permutations
p = perms(t);
% Only keep the unique combinations of the first 3 letters
p = unique(p(:,1:3),'rows')
% Only keep those permutations that have 'A' in the first column, 'B' in the 2nd and 'C' in the third.
% strcmpi is case insensitive
p = p(strcmpi(p,"ABC"),:)
  2 comentarios
Kyle Tan
Kyle Tan el 6 de Jul. de 2021
Editada: Kyle Tan el 6 de Jul. de 2021
How can I incorporate this formula into a find txt formula?
After finding all information, I need a command to find all possible combinations of a ten letter of strings of D and E only. EX: DDDDDDDDDE, EEEEDEDEDE, etc., in any order and any amount of Ds and Es. While I used the permutation formula, I found that there were 252 results, but only involving the combination of exactly 5 D's and 5 E's. If possible, is there a way to list all possible combinations AND Permutations?
Cris LaPierre
Cris LaPierre el 7 de Jul. de 2021
Editada: Cris LaPierre el 7 de Jul. de 2021
Not sure of your data format, but I think I would take a slightly different approach here. I would use the pattern searching capabilities of MATLAB to identify the sequences you want.
% using cell arrays
C = {'DDDDDDDDDE','EEEEDEDEDE','EEEEDEDEDA'};
pat = characterListPattern("DE");
inds = count(C,pat,'IgnoreCase',true)==10;
C{inds}
ans = 'DDDDDDDDDE'
ans = 'EEEEDEDEDE'
% using string arrays
txt = ["DDDDDDDDDE","EEEEDEDEDE","EEEEDEDEDA"];
pat = characterListPattern("DE");
inds = count(txt,pat,'IgnoreCase',true)==10;
txt(inds)
ans = 1×2 string array
"DDDDDDDDDE" "EEEEDEDEDE"

Iniciar sesión para comentar.

Etiquetas

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by