【LeetCode 140】Offer 驾到,掘友接招!我正在参与2022春招系列活动-刷题打卡任务

84 阅读1分钟

Offer 驾到,掘友接招!我正在参与2022春招系列活动-刷题打卡任务活动详情

一、题目描述

给定一个字符串和一个字典,按照字典将字符串添加空格,使得其每个单词都合法,返回所有的可行的划分。

数据范围

l <= 20

二、思路分析

由于数据很小,我们可以考虑暴搜,每次对剩下的串进行考虑,如果有某个前缀合法的话就继续递归处理剩下的串。

有个地方被自己坑了,stringAPI 很多都是会修改字符串自身的,一开始没注意到,导致递归后出来原来的信息被污染了,查了半天才发现是这个锅。

三、AC代码

class Solution {
public:
    vector<string> ans;
    map<string, int> mp;

    void dfs(string now, string s){
        if (s.length() == 0) {
            ans.push_back(now);
            return;
        }
        if (now.length()) {
            now.push_back(' ');
        }
        int l = s.length();
        for (int i=1; i<=l; i++) {
            string pick = s.substr(0,i);
            if (mp[pick]) {
                string now2 = now;
                now2.append(pick);
                string s2 = s;
                s2.erase(0,i);
                dfs(now2, s2);
            }
        }
        return;
    }

    vector<string> wordBreak(string s, vector<string>& wordDict) {
        for (auto d:wordDict) {
            mp[d] = 1;
        }
        string f;
        dfs(f, s);
        return ans;
    }
};

四、总结

代码中善于利用 stringAPI ,比起之前自己经常写裸的char数组好用多了,心智负担也降低了很多。