use std::collections::HashMap;
impl Solution { fn dfs(s:String, word_dict: &Vec<String>, m: &mut HashMap<String, Vec<String>>) -> Vec<String> { if m.contains_key(&s) { return m.get(&s).unwrap().clone(); } if s.is_empty() { return vec!["".to_string()]; } let mut ans = vec![]; for word in word_dict { if s.len() < word.len() || &s[0..word.len()] != word { continue; } let next = &s[word.len()..].to_string().clone(); let rem = Self::dfs((*next).clone(), word_dict, m); for string in rem { let mut w = word.clone(); if !string.is_empty() { w.push(' '); } w.push_str(&string); ans.push(w); } } let ret = ans.clone(); m.insert(s, ans); return ret; }
pub fn word_break(s: String, word_dict: Vec<String>) -> Vec<String> { let mut map = HashMap::new(); return Self::dfs(s, &word_dict, &mut map); } }
|