给定字典,判断输入单词是否可以拆分为字典中的单词。
暴力+剪枝。
开始超时,额外地判定,当前的字符是否都在字典中存在即可。但是我感觉钻了测试数据的空子。
class Solution { public: bool result; bool letters[26]; bool wordBreak(string s, unordered_set<string> &dict) { result = false; for(int i = 0;i < 26;i++) letters[i] = false; for(string it:dict) { for(int i = 0;i < it.length();i++) { letters[it[i] - 'a'] = true; } } for(int i = s.length();i > 0;i--) { if(existLetters(string(s,0,i)) == false)return false; if(dict.find(string(s,0,i)) != dict.end()) { if(i == s.length())return true; else { wordBreakStep(s,i,dict); } } } return result; } private: bool existLetters(string s) { for(int i = 0;i < s.length();i++) { if(letters[s[i] - 'a'] == false)return false; } return true; } void wordBreakStep(string s,int start,unordered_set<string> &dict) { if(result == true)return; for(int i = s.length() - start;i > 0;i--) { if(existLetters(string(s,start,i)) == false)return; if(dict.find(string(s,start,i)) != dict.end()) { if(i == s.length()-start) { result = true; return; } else { wordBreakStep(s,start + i,dict); } } } } };