提供两个字符串'goosegun'
和'goslingnun'
,我将找到每个字符串的选择3的每个排列,然后仅显示 两者之间的交叉点。目前我在不使用intersect(comboPerm1,comboPerm2,'rows')
的情况下这样做,但我想知道如何使用它。我想我的主要问题是弄清楚如何显示文字。
对于我在代码中使用的变量,这里是他们如何找到的。
r = 3;
numPerms = factorial(r);
elements1 = 'goosegun';
n1 = numel(elements1);
numCombos1 = factorial(n1) / (factorial(n1-r)*factorial(r));
letterCombos1 = nchoosek(elements1,r);
elements2 = 'goslingnun';
n2 = numel(elements2);
numCombos2 = factorial(n2) / (factorial(n2-r)*factorial(r));
letterCombos2 = nchoosek(elements2,r);
counter = -1;
这是我的代码(我认为)。
% Goes through each combination
for i = 1 : numCombos1
comboPerm1 = perms(letterCombos1(i,:));
% Goes through each permutation of the combination
for j = 1 : numPerms
for k = 1 : numCombos2
comboPerm2 = perms(letterCombos2(k,:));
for p = 1 : numPerms
if (comboPerm1(j,:) == comboPerm2(p,:))
counter = counter + 1;
if (mod(counter,numPerms) == 0)
fprintf('\n\t');
end
fprintf('%s ',comboPerm2(p,:));
end
end
end
end
end
这是我尝试使用相交的代码。
for i = 1 : numCombos1
comboPerm1 = perms(letterCombos1(i,:));
for j = 1 : numPerms
for k = 1 : numCombos2
comboPerm2 = perms(letterCombos2(k,:));
for p = 1 : numPerms
a = intersect(comboPerm1,comboPerm2,'rows');
if (exist(a, 'var') == 0)
fprintf('%s ',a);
end
end
end
end
end
希望我能很好地解释自己,因为这是我在这个网站上的第一个问题。谢谢你的帮助。