Creating all possible combination of a letter/string

26 vues (au cours des 30 derniers jours)
Rahul J Hirur
Rahul J Hirur le 17 Juin 2020
Modifié(e) : Cris LaPierre le 7 Juil 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?

Réponse acceptée

James Tursa
James Tursa le 17 Juin 2020
Modifié(e) : James Tursa le 17 Juin 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 commentaires
Rahul J Hirur
Rahul J Hirur le 18 Juin 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 le 18 Juin 2020
Yes, e.g.,
result = repmat(upper(dem_a),2^n,1);

Connectez-vous pour commenter.

Plus de réponses (1)

Cris LaPierre
Cris LaPierre le 17 Juin 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 commentaires
Kyle Tan
Kyle Tan le 6 Juil 2021
Modifié(e) : Kyle Tan le 6 Juil 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 le 7 Juil 2021
Modifié(e) : Cris LaPierre le 7 Juil 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"

Connectez-vous pour commenter.

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by