Данный алгоритм не выводит все подстроки в слове
Проблема заключается в том, что алгоритм не выводит все строки в слове. Если у нас есть строка с удаленными префиксом и суффиксом, то должно сперва вывести одинарные буквы, потом подстроки из двух, из трех и так далее. Прошу подсказать что не так.На картинке показано результаты работы метода.
public List<string> GetSubstring(List<string> words)
{
HashSet<string> SetSubstrings = new HashSet<string>();
string removed = "";
foreach (var word in words)
{
SetSubstrings.Add("Подстроки слова " + word);
removed = word.Remove(0, 1);
removed = removed.Remove(removed.Length - 1);
for (int i = 0; i < removed.Length; i++)
{
string substring = removed.Substring(i);
for (int j = 0; j < removed.Length-i; j++)
{
SetSubstrings.Add(substring);
substring = substring.Substring(1);
}
}
removed = "";
}
return SetSubstrings.ToList();
}
Ответы (1 шт):
Автор решения: tym32167
→ Ссылка
Чето как то сложно у вас всё. Чтобы пробежать по всем подстрокам в порядке длины подстроки, достаточно всего пары циклов. Пример
void SubStrings(string word)
{
for (int len = 1; len <= word.Length; len++)
for (int start = 0; (start + len) <= word.Length; start++)
Console.WriteLine(word.Substring(start, len));
}
Проверка
SubStrings("Geshtalt");
Результат
G
e
s
h
t
a
l
t
Ge
es
sh
ht
ta
al
lt
Ges
esh
sht
hta
tal
alt
Gesh
esht
shta
htal
talt
Gesht
eshta
shtal
htalt
Geshta
eshtal
shtalt
Geshtal
eshtalt
Geshtalt
Чтобы убрать дубликаты, используйте Хешсет. Но имейте ввиду, что хешсет не гарантирует порядок элементов.
