は、私がコード化されたソリューションを提供するつもりはない申し訳ありませんが、より多くの私はあなたがコーディングを開始できるように、使用したいプロセスは、任意の特定の問題は、質問を投稿すること自由に落ちた
nchoosek
はセルアレイC
の全ての順列の配列を生成するので、
nCells = length(C);
nPerms = nchoosek(1:nCells,2);
することはでき、ループの一般的な文字列があるかどうかを確認するように交差使用してすべての順列を超えます。
result(i) = intersect(C{nPerms(i,1)},C{nPerms(i,2)});
これはあなたにすべての一般的な文字列をリストする配列を与えるだろうとnPerms配列を使用して、あなたは一般的な文字列で2つの行を持っています。しかし、これを実行しようとすると、intersect
が各セル配列に同じ数の要素を持つのが好きなので失敗します。
私は空のセルで埋め込まれた一時的なセル配列を作成して、Cの各要素がループの前に同じ長さになるようにします。
これは、各セルの要素数(@numel)を計算し、次に最大値を計算することによって配列Cの中で最も長いセルを計算します。
cSize = cellfun(@numel,C);
maxSize = max(cSize);
私たちは、その後、これはあなたに、各セルの要素数が同じセル配列を与えるべきであるパッドに空白のセル
fcn = @(x) [x cell(1,maxSize - numel(x))];
paddedC = cellfun(fcn,C,'UniformOutput',false);
を機能を定義することができます。この順列を各順列をテストするループでこのセル配列を使用することができます。
間違いなく、誰かが1行のcellfunソリューションを公開することは間違いありませんが、これで十分です。
私の最初の質問はスタックだから、もっと明確にする必要があるかどうか教えてください。 ありがとう! – AndyMeow
「ここには私が試したことがあるが、私はこのビットに固執している」という行に沿って質問に耳を傾ける傾向があります。それで、私の反応の様式 - それが助けてくれることを願っています。 – Adrian