139. 单词拆分

自己的错误代码,没有看出来动态规划,虽然知道暴力不行,很简单的动态规划,然后自己还是被用例打败,最后其实还是学到了

又因为字符串拼接与截取

查看代码
class Solution {
public:

    bool wordBreak(string s, vector<string>& wordDict) {
        int max_string=0 ;
        int min_string=301 ;
        // wordDict.push_back("asdfefefe");
        // sort(wordDict.begin(),wordDict.end());
        // for(int i=0;i<wordDict.size();i++){
        //     cout<<wordDict[i];
        // }主要是测试字符串排序方式
        for(int i=0; i<wordDict.size() ; i++){
            int length = wordDict[i].size();
            max_string = max(max_string,length);
            min_string = min(min_string,length);
        }
        for(int i=min_string; i<=max_string ; i++){
            if(test(s,0,i,wordDict,max_string,min_string))
                return true;
        }
        return false;
    }
    bool test(string s, int left,int step, vector<string>wordDict,int max_string,int min_string){
        string temp = s.substr(left,step);
        for(int i=0; i<wordDict.size();i++){
            if(temp == wordDict[i]){
                if( left+step == s.size())  //复制时从起点复制step个,所以left+step是在s中多一个下标的
                return true;
                else {
                    for(int j=min_string;j<=max_string;j++){
                        if(test(s,left+step,j,wordDict,max_string,min_string))
                        return true;
                    }
                }
            }
         
        }
        return false;
    }
};

 

posted @ 2021-12-11 20:17  jozon  阅读(31)  评论(0)    收藏  举报