单词拆分I

题目:

给出一个字符串s和一个词典,判断字符串s是否可以被空格切分成一个或多个出现在字典中的单词。

样例:

给出
s="lintcode"
dict=["lint","code"]
返回 true 因为"lintcode"可以被空格切分成"lint code"

思路:

用res[i]代表字符串s的到第i个元素为止能不能用字典中的值来表示,可以的话为true。
能够表示的条件是:1. s[j,i]能够在字典中找到; 2. 并且res[j]为true。
本题要注意的是边界条件,字符串的下标是从0开始算的,即s[0]是第1个元素,对应的是res[1].

参考答案:

class Solution {
public:
    /*
     * @param s: A string
     * @param dict: A dictionary of words dict
     * @return: A boolean
     */
    bool wordBreak(string &s, unordered_set &dict) {
        // write your code here       
        unordered_set::iterator it;
        
        //特殊情况
        int n= s.length();
        if(n == 0)   return true;
        if(dict.size() == 0) return false;
        
        //res[i]指的是字符串s的第i个元素为止能不能用字典中的值来表示。
        bool res[n+1];
        memset(res,false,n+1);
        /*
        也可以用向量vector res(n+1,false);
        */
        res[0] = true;
        /*时间复杂度O(n*n)
        for(int i=0; i

你可能感兴趣的:(算法,动态规划)