Данный алгоритм не выводит все подстроки в слове

Рейтинг: 0Ответов: 1Опубликовано: 06.02.2023

Проблема заключается в том, что алгоритм не выводит все строки в слове. Если у нас есть строка с удаленными префиксом и суффиксом, то должно сперва вывести одинарные буквы, потом подстроки из двух, из трех и так далее. Прошу подсказать что не так.На картинке показано результаты работы метода.

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();
        }

Вывод на данный момент

Ответы

▲ 3Принят

Чето как то сложно у вас всё. Чтобы пробежать по всем подстрокам в порядке длины подстроки, достаточно всего пары циклов. Пример

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

Чтобы убрать дубликаты, используйте Хешсет. Но имейте ввиду, что хешсет не гарантирует порядок элементов.