LeetCode 139.单词拆分(dp+set)

原题链接 字节跳动夏令营笔试题

题目描述

给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。

说明:

拆分时可以重复使用字典中的单词。
你可以假设字典中没有重复的单词。


示例 1:

输入: s = "leetcode", wordDict = ["leet", "code"]
输出: true
解释: 返回 true 因为 "leetcode" 可以被拆分成 "leet code"。


示例 2:

输入: s = "applepenapple", wordDict = ["apple", "pen"]
输出: true
解释: 返回 true 因为 "applepenapple" 可以被拆分成 "apple pen apple"。
     注意你可以重复使用字典中的单词。


示例 3:

输入: s = "catsandog", wordDict = ["cats", "dog", "sand", "and", "cat"]
输出: false

 

class Solution {
public:
    bool wordBreak(string s, vector& wordDict) {
    	int n = s.size();
    	vector  dp(n + 1, false);
    	// leetcode leet code
    	unordered_set  hash(wordDict.begin(), wordDict.end());

    	// It will be clear when you calculate it on the draft paper
    	dp[0] = true;
    	for (int i = 1; i <= n; i ++) {
    		for (int j = 0; j < i; j ++) {
    			if (hash.find(s.substr(j, i - j)) != hash.end() && dp[j] == true) {
    				dp[i] = true;
    				break;
    			}
    		}
    	}

    	return dp[n];
    }
};

 

你可能感兴趣的:(LeetCode)