leetcode Word Break II

int length;
    vector<string> one_result;
    vector<string> result;
    vector<vector<bool> > is_word;
    
    void backTrack(string &s, int last, int index, vector<string> &one_result)
    {
        if(last == length)
        {
            string str;
            for(int i = 0; i < one_result.size(); ++i)
            {
                str.append(one_result[i]);
                if(i != one_result.size() - 1)
                    str.append(" ");
            }
            result.push_back(str);
            return;
        }
    
        for(int i = last; i < length; ++i)
        {
            if(is_word[last][i])
            {
                one_result.push_back(s.substr(index, i - index + 1));
                backTrack(s, i+1, i+1, one_result);
                one_result.pop_back();
            }
        }
    }
    
    vector<string> wordBreak(string s, unordered_set<string>& wordDict)//unordered_set
    {
        if(s.empty() || wordDict.empty())
            return result;
    
        length= s.size();
        is_word.assign(length, vector<bool>(length, false));
        for(int i = 0; i < length; ++i)
        {
            for(int j = i; j < length; ++j)
            {
                if(wordDict.count(s.substr(i, j - i + 1)) > 0)
                    is_word[i][j] = true;
            }
        }
        
        //第一个字母开头就不能划分
        int index = 0;
        for(index = 0; index < length; ++index)
        {
            if(is_word[0][index])
                break;
        }
        if(index == length)
            return result;
        
        //最后一个单词不能划分
        index = 0;
        for(index = 0; index < length; ++index)
        {
            if(is_word[index][length-1])
                break;
        }
        if(index == length)
            return result;
        
        backTrack(s, 0, 0, one_result);
        return result;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值