Given an input string and a dictionary of words, find out if the input string can be segmented into a space-separated sequence of dictionary words.
This algorithm uses memoization to improve performance. It's same as the recursive version of Word Break, but with a special 'cache' to store results. The 'cache key' is crucial. It's how we identify and store past results. Sometimes we need one key, sometimes multiple keys. We add code to:
cache = {} def search(words, s): if s == '': return True global cache if s not in cache: cache[s] = False for i in range(len(s) - 1, -1, -1): if s[0:i + 1] in words: cache[s] = search(words, s[i + 1:]) return cache[s] words = ['i', 'like', 'sam', 'sung', 'samsung', 'mobile', 'ice', 'cream', 'icecream', 'man', 'go', 'mango'] string = 'ilikesamsung' print(search(words, string))
const cache = {} function search(words, s) { if (s === '') return true; if (cache[s] === undefined) { cache[s] = false; for (let i = s.length - 1; i >= 0; i--) { if (words.indexOf(s.slice(0, i + 1)) >= 0) { cache[s] = search(words, s.slice(i + 1)); } } } return cache[s]; } const words = ['i', 'like', 'sam', 'sung', 'samsung', 'mobile', 'ice', 'cream', 'icecream', 'man', 'go', 'mango']; const string = 'ilikesamsung'; console.log(search(words, string));