Split a string to a string of valid words using Dynamic Programming

后端 未结 6 1197
不知归路
不知归路 2020-12-23 15:02

I need to find a dynamic programming algorithm to solve this problem. I tried but couldn\'t figure it out. Here is the problem:

You are given a string of n character

6条回答
  •  庸人自扰
    2020-12-23 15:45

    A dp solution in c++:

    int main()
    {
        set dict;
        dict.insert("12");
        dict.insert("123");
        dict.insert("234");
        dict.insert("12345");
        dict.insert("456");
        dict.insert("1234");
        dict.insert("567");
        dict.insert("123342");
        dict.insert("42");
        dict.insert("245436564");
        dict.insert("12334");
    
        string str = "123456712334245436564";
    
        int size = str.size();
        vector dp(size+1, -1);
        dp[0] = 0;
        vector res(size+1);
        for(int i = 0; i < size; ++i)
        {
            if(dp[i] != -1)
            {
                for(int j = i+1; j <= size; ++j)
                {
                    const int len = j-i;
                    string substr = str.substr(i, len);
                    if(dict.find(substr) != dict.end())
                    {
                        string space = i?" ":"";
                        res[i+len] = res[i] + space + substr;
                        dp[i+len] = dp[i]+1;
                    }
                }
            }
        }
        cout << *dp.rbegin() << endl;
        cout << *res.rbegin() << endl;
    
        return 0;
    }
    

提交回复
热议问题