【发布时间】:2012-03-17 15:06:32
【问题描述】:
我有一个单词数组,这些单词取自一个句子(句子中的每个单词都放在一个数组中)。
用户可以搜索一个短语以查看它是否在该句子中找到。这要通过字符的偏移值来确定。这意味着会分别检查每个单词以查看它是否存在于短语中,然后执行检查以查看单词是否在彼此之后(由句子中的空格分隔)。
单词存储在树中,因此偏移值(字符位置)是唯一决定哪个单词出现在哪个单词之后(并且由空格分隔)。
我的问题是相同的单词(并且已经存储在树中)具有相同的偏移值,因此每个单词都存储了一个具有特定单词的所有偏移值的数据结构。这是我到目前为止得到的代码,除了在以下情况下失败之外,它工作得很好:
例如我有这句话:this is a test to see if this is working。
如果我搜索“this is a”,则返回第一个 this is 以及 this is a。
代码如下:
for (int i = 0; i < offsets.Count - 1; i++)
{
LinkedList<int> current = allOffsets[i];
LinkedList<int> next = allOffsets[i + 1];
for (int j = 0; j < current.Count; j++)
{
for (int k = 0; k < next.Count; k++)
{
if (current.ElementAt(j) + words[i].Length - 1 + 2 == next.ElementAt(k))
{
if (!finalResult.Contains(current.ElementAt(j)))
{
finalResult.Add(current.ElementAt(j));
}
if (!finalResult.Contains(next.ElementAt(k)))
{
finalResult.Add(next.ElementAt(k));
}
}
}
}
}
return finalResult;
请注意finalResult 是一个存储所有“有效”偏移的列表,offsets 存储树中的所有偏移。 words 是一个数组,包含从句子中拆分出来的所有单词。
编辑:另外请注意,我通过将单词的第一个字母的偏移量加 2(以考虑空格)来检查单词是否彼此跟随将等于下一个单词的第一个字母的偏移量,如果它跟在后面的话。
【问题讨论】:
-
想要的输出仅仅是一个字符串短语吗?还是您需要将数组中的这些偏移量用于其他用途?
标签: c# .net search data-structures tree