#include <vector> class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 * @param wordDict string字符串vector * @return bool布尔型 */ bool wordBreak(string s, vector<string>& wordDict) { // write code here set<string>se; int ls = wordDict.size(); int ans = 0; while (ans < ls) { se.insert(wordDict[ans]); ++ans; } int n = s.size(); vector<bool>dp(n + 1, false); dp[0] = true; for (int i = 1; i <= n; ++i) { for (int j = 0; j < i; ++j) { string ss = s.substr(j, i - j); if (se.find(ss) != se.end() && dp[j]) { dp[i] = true; break; } } } return dp[n]; } };
一、题目考察的知识点
dp+set
二、题目解答方法的文字分析
双层循环遍历串和子串,枚举词汇表中的单词,如果当前子串在词汇表中那么就置为true
三、本题解析所用的编程语言
c++