我已經從一個句子中獲取了一組單詞(句子中的每個單詞放在一個數組中)。正在搜索一個短語
用戶可以搜索一個短語,以查看它是否在此句子中找到。這是通過字符的偏移值確定的。這意味着每個單詞都被檢查以查看它是否存在於短語中,然後進行檢查以查看這些單詞是否相繼出現(由句子中的空格分隔)。
單詞存儲在一棵樹中,因此偏移值(字符位置)是決定哪個單詞在哪個單詞之後(並且用空格分隔)唯一的東西。
我的問題是,相同(並且已存儲在樹中)的單詞具有相同的偏移值,因此每個單詞都存儲所有偏移值的數據結構,並與特定單詞一起提供。這是迄今爲止的代碼,除了在以下情況下失敗之外,它完美的工作:
例如,我有這句話:this is a test to see if this is working
。
如果我搜索'這是',那麼將返回第一個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(考慮到空間)來查看單詞是否相互跟隨,並且這將等於下一個單詞的第一個字母的偏移量(如果有)。
是所需的輸出只是一個字符串短語?或者你是否需要在數組中使用這些偏移來獲得其他內容? – 2012-03-17 17:16:26