我有一个由特殊字符(B、C、D、F、X、Z)随机生成的字符串,例如生成以下字符串列表:
B D Z Z Z C D C Z
B D C
B Z Z Z D X
D B Z F
Z B D C C Z
B D C F Z
..........
我还有一个模式列表,即匹配生成的字符串并返回最佳模式并从字符串中提取一些字符串。
字符串模式
B D C [D must appear before the C >> DC]
B C F
B D C F
B X [if string have X,must be matched.]
.......
例如,
B D Z Z Z C D C Z
, 有B
and DC
, 所以可以匹配B D C
D B Z C F
, 有B
and C
,F
所以可以匹配B C F
D B Z D F
, 有B
and F
, 所以可以匹配B F
…………
现在,我只是想suffix array
。
1.首先将字符串转换为后缀数组对象。
2.循环每个模式,找到可以匹配的后缀数组。
3.比较所有匹配的模式,得到最好的模式。
var suffix_array=Convert a string to suffix array.
var list=new List();
for (int i=0;i<pattern length;i++){
if (suffix_array.match(pattern))
list.Add(pattern);
}
var max=list[0];
for (int i=1;i<list.length;i++){
{
if (list[i]>max)
max=list[i];
Write(list[i]);
}
我只是觉得这种方法很复杂,需要为模式构建一棵树,并用它来匹配后缀数组。谁有更多的想法?
=====================更新
我现在得到了一个最好的解决方案,我创建了一个新类,它有一个 B、C、D、X ......的属性是数组类型。每个属性保存一个出现在字符串中的位置。现在,如果字符串中没有出现B,我们可以立即结束这个处理。我们也可以得到所有的C和D位置,然后比较是否可以顺序出现(DC,DCC,CCC....)