В нелинейном списке найти заданный элемент. Результат выдать в виде линейного списка - C#
Формулировка задачи:
Здравствуйте. У меня есть задача: В нелинейном списке найти заданный элемент (м.б., не атом). Результат выдать в виде линейного списка (отдельный список для каждого вхождения), каждый элемент которого является индексом очередного сегмента поиска. Если элемент не найден, выдать 0.
Проблема: Я решила подавать сложный список как строку и парсить ее потом для поиска. Так вот, никак не удается разработать хороший алгоритм для этого. Все время теряется уровень или списки путаются с простыми элементами. Нужен функциональный подход, а не ООП. Помогите пожалуйста, если у кого есть идеи или кто встречался с подобными задачами. Спасибо.
Решение задачи: «В нелинейном списке найти заданный элемент. Результат выдать в виде линейного списка»
textual
Листинг программы
static IEnumerable<string> FindElement(ref string input) {
var level = 0;
var currentPosition = 0;
var positions = new List<int> { 0 };
var result = new List<string> { "(" };
foreach (var simbol in input.Skip(1).Take(input.Length - 2)) {
switch (simbol) {
case ')':
currentPosition = positions[--level];
break;
case '(':
positions.Add(0);
positions.Insert(level, currentPosition + 1);
currentPosition = 0;
level++;
break;
case '*':
currentPosition++;
for (var i = 0; i < level; ++i) {
result.Add("(");
result[i] += " " + positions[i];
}
result[level] += " " + currentPosition;
break;
case ' ':
break;
default:
currentPosition++;
break;
}
}
return result;
}