Как проверить, может ли слово состоять из записей в массиве? - PullRequest
0 голосов
/ 14 мая 2019

У меня есть следующее задание:

Дано слово "Супермагистраль".Проверьте, может ли такое слово состоять из записей в массиве: [ab, bc, Super, h, igh, way] - да;[ab, bc, Super, way] - нет;

Мое предложение состоит в том, чтобы создать Trie из массива и на основе Trie сделать вывод, может ли целевое слово быть получено или нет.

Также,Я видел, что динамическое программирование применимо к подобным проблемам.

Не могли бы вы объяснить лучшее решение для этой задачи?

1 Ответ

1 голос
/ 15 мая 2019

Динамическое программирование должно применяться здесь.Оптимальная подструктура здесь:

dp [i]: если s [0, i) может состоять из записей в массиве обеспечения.

dp [i] | = dp [j] && (s [j, i) - запись в массиве).

        public boolean wordBreak(String s, List<String> wordDict) {
            Set<String> wordDictSet = new HashSet(wordDict);
            boolean[] dp = new boolean[s.length() + 1];
            dp[0] = true;
            for (int i = 1; i <= s.length(); i++) {
                for (int j = 0; j < i; j++) {
                    if (dp[j] && wordDictSet.contains(s.substring(j, i))) {
                        dp[i] = true;
                        break;
                    }
                }
            }
            return dp[s.length()];
        }
...