String 返回字符串的所有子序列
我试图在Matlab中编写伪代码和算法,以返回字符串的所有子序列 因此字符串String 返回字符串的所有子序列,string,matlab,String,Matlab,我试图在Matlab中编写伪代码和算法,以返回字符串的所有子序列 因此字符串X={ABCD}将返回XSubSequence={A,B,C,D,AB,AC,AD,BC,BD,CD,ABC,ABD,ABC},顺序当然不重要 clear x = 'ABC'; XSize = length(x); count = 1; i=1; for i=1:XSize ZSubSequence{count} = x(i); count = count + 1; for j=i+1:XSiz
X={ABCD}
将返回XSubSequence={A,B,C,D,AB,AC,AD,BC,BD,CD,ABC,ABD,ABC}
,顺序当然不重要
clear
x = 'ABC';
XSize = length(x);
count = 1;
i=1;
for i=1:XSize
ZSubSequence{count} = x(i);
count = count + 1;
for j=i+1:XSize
temp = strcat(x(i),x(j));
ZSubSequence{count} = temp;
count = count + 1;
for k=i+2:XSize
if j ~= k
temp = strcat(x(i), x(j), x(k));
ZSubSequence{count} = temp;
count = count + 1;
end
end
end
end
有没有办法让这个更动态,所以我可以添加<代码> x>代码>任何大小,它都能处理它?
你可能想考虑一个完全不同的方法。 这是长度为1到2^length(x)-1的十进制数的二进制表示形式。例如,1100=12表示AB,0011=3表示CD,1000表示A,1111=2^4-1=15表示ABCD,依此类推。 您可能希望创建此序列,然后将其转换为现有的输入输出 示例代码:x = 'ABCD';
XSize = length(x);
seq=dec2bin([1:2^XSize-1]);
现在剩下的就是把它翻译成字母
for i=1:1:2^XSize-1
for j=1:1:XSize
if seq(i,j)=='1'
seq(i,j)=x(j);
else
seq(i,j)='_';
end
end
end
显然,应该删除“u”,并按照您希望的方式格式化输出。这样做就可以了。它只有一个循环(没有嵌套),所以应该非常快
x = 'ABCD';
n = length(x);
subseq = x.';
for ii = 2:n
subseq = strvcat(subseq, x(nchoosek(1:n,ii)));
end
subseq_deblanked = deblank(mat2cell(subseq, ones(size(subseq,1),1), n));
结果是:
:字符矩阵,其中每行包含一个子序列,并填充空格subseq
<>代码>子SEQQueDeBurkD/<代码>:删除空白空间的字符串单元数组,如您指定的
4
应该是n
。我已经更正了我的答案。请现在试一试