我正在尝试从长预定义的字符数组中生成一个字符串数组,如下所示
如果我有以下长字符串:
s= 'aardvaqrkaardwolfaajronabackabacusabvaftabalongeabandonabandzonedaba'
我想根据以下规则创建一组随机字符串
字符串应该在4到12个字符之间,应该结束或开始
使用以下字符之一{j,q,v,f,x,g,b,d,z}
答案 0 :(得分:0)
所以这里有一个解决方案,它提供满足以下规则的所有字符串:
起始和结束字符必须来自字符串:
start_end_char= 'jqvfxgbdz';
长度必须介于4到8个字符之间
字符串必须顺序正确。意味着结果 字符串必须以完全相同的方式出现在“long”字符串
那我在做什么?
s2
而不是s
作为字符串名称。)list_sorted
)helper
中,由于字符串长度不同,因此必须是cell-datatype 最后但并非最不重要的是我构造了所有这些字符串并将它们保存在resulting_strings
中,它们也必须是一个cell-datatype。
s2= 'aardvaqrkaardwolfaajronabackabacusabvaftabalongeabandonabandzonedaba';
start_end_char= 'jqvfxgbdz';
length_start = length(start_end_char);
%%finding all positions of possible starting/ending points
position_char= cell(1,length_start);
for k=1:length_start
position_char{k}=find(s2==start_end_char(k));
end
list_of_start_end_points=[];
%% getting an array with all starting/ending points in the given array
for k=1:length_start
list_of_start_end_points= horzcat(list_of_start_end_points,position_char{k});
end
sorted_list= sort(list_of_start_end_points);
%% getting possible combinations
helper = cell(1, length(sorted_list));
length_helper=[];
for k=1:length(sorted_list)
helper{k}=find(and(sorted_list-sorted_list(k)>=4,sorted_list-sorted_list(k)<=8));
length_helper = length_helper + length(helper);
end
resulting_strings = cell(1, length_helper);
l=1;
for k=1:length(sorted_list)
for m=1:length(helper{k})
resulting_strings{1,l} = s2(sorted_list(k):sorted_list(helper{k}(m)));
l=l+1;
end
end
这个解决方案使用了很多循环,而前两个循环是可否定的(可接受的开始/结束字母大小的循环次数),如果原始字符串更长,后两个循环可能非常耗时。所以也许有人会为后来的循环找到一个矢量化解决方案。