У меня есть массив слов, которые взяты из предложения (каждое слово в предложении помещается в массив).
Пользователь может искать фразу, чтобы увидеть, найдена ли она в этом предложении. Это должно быть определено через значения смещения символов. Это означает, что каждое слово проверяется, чтобы увидеть, существует ли оно во фразе отдельно, затем выполняется проверка, чтобы увидеть, идут ли слова после друг друга или нет (разделенные пробелом в предложении).
Слова хранятся в дереве, и, таким образом, значения смещения (позиция символа) - это единственное, что определяет, какое слово следует за каким (и разделяется пробелом).
Моя проблема в том, что слова, которые являются одинаковыми (и уже сохранены в дереве), имеют одинаковые значения смещения, и, таким образом, каждое слово хранит структуру данных всех значений смещения, присвоенных конкретному слову. Это код, который я получил до сих пор, который отлично работает, за исключением того, что он не работает в следующем случае:
Например, у меня есть это предложение: this is a test to see if this is working
.
Если я ищу «это 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 (для учета пробела), и это будет быть равным смещению первой буквы следующего слова, если оно следует.