zoukankan      html  css  js  c++  java
  • Word Break II

    Given a string s and a dictionary of words dict, add spaces in s to construct a sentence where each word is a valid dictionary word.

    Return all such possible sentences.

    For example, given
    s = "catsanddog",
    dict = ["cat", "cats", "and", "sand", "dog"].

    A solution is ["cats and dog", "cat sand dog"].

    [解题思路]

    DFS + backtracking

    在大数据:"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab", ["a","aa","aaa","aaaa","aaaaa","aaaaaa","aaaaaaa","aaaaaaaa","aaaaaaaaa","aaaaaaaaaa"]通不过。

    C++实现代码:

    #include<iostream>
    #include<unordered_set>
    #include<string>
    #include<cstring>
    using namespace std;
    
    class Solution
    {
    public:
        bool wordBreak(string s, unordered_set<string> &dict)
        {
            int len=s.length();
            if(len==0)
                return true;
            bool dp[len+1];
            memset(dp,0,sizeof(dp));
            int i,j;
            for(i=1; i<=len; i++)
            {
                if(dp[i]==false&&dict.count(s.substr(0,i))>0)
                    dp[i]=true;
                if(i==len&&dp[i]==true)
                    break;
                if(dp[i]==true)
                {
                    for(j=i+1; j<=len; j++)
                    {
                        if(dp[j]==false&&dict.count(s.substr(i,j-i))>0)
                            dp[j]=true;
                        if(j==len&&dp[j]==true)
                            break;
                    }
                }
            }
            if(i==len||j==len)
                return dp[i]||dp[j];
            return false;
        }
    };
    
    int main()
    {
        unordered_set<string> dict= {"cat", "cats", "and", "sand", "dog"};
        Solution s;
        string ss = "catsanddog";
        cout<<s.wordBreak(ss,dict)<<endl;
    }

     2.DP+DFS

    使用Word Break对字符串进行处理,处理结束后使用DFS进行DFS。

    #include<iostream>
    #include<unordered_set>
    #include<string>
    #include<cstring>
    #include<vector>
    using namespace std;
    
    class Solution
    {
    public:
        vector<string> ss;
        vector<string> wordBreak(string s, unordered_set<string> &dict)
        {
            // IMPORTANT: Please reset any member data you declared, as
            // the same Solution instance will be reused for each test case.
            int n=s.size();
            ss.clear();
            bool dp[n];
            memset(dp,false,sizeof(dp));
            for(int i=0; i<n; i++)
                dp[i]=false;
            for(int j=n-1; j>=0; j--)
            {
                for(int i=j; i<n; i++)
                {
                    string t(s.begin()+j,s.begin()+i+1);
                    if( dict.find(t)!=dict.end() )
                    {
                        if( ( i+1<n && dp[i+1])|| i==n-1)
                            dp[j]=true;
                    }
                }
            }
            dfs(0,n,s,string (""),dict,dp);
            return ss;
        }
        void dfs(int st,int n,string str,string cur,unordered_set<string> &dict,bool dp[])
        {
            if(st==n)
            {
                ss.push_back(cur);
                return ;
            }
            for(int i=st; i<n; i++)
            {
                string t(str.begin()+st,str.begin()+i+1);
                if((dp[i+1]||i+1==n) &&  (dict.find(t)!=dict.end() ))
                {
                    int c=cur.size();
                    cur+=t;
                    if(i<n-1)
                        cur.push_back(' ');
                    dfs(i+1,n,str,cur,dict,dp);
                    cur.resize(c);
                }
            }
        }
    };
    
    int main()
    {
        unordered_set<string> dict= {};
        Solution s;
        string ss = "a";
        vector<string> result=s.wordBreak(ss,dict);
        for(auto a:result)
            cout<<a<<endl;
    }

    参考:http://blog.csdn.net/cs_guoxiaozhu/article/details/14104789

  • 相关阅读:
    sql语句中as的用法和作用
    设置国内AndriodSDK代理
    Ionic开发环境搭建
    SpringMvc+Mybatis开发调用存储过程
    SpringMvc的JSON数据交互
    SpringMvc+Mybatis开发需要的jar包
    nested exception is java.lang.NoClassDefFoundError: org/hibernate/validator/resourceloading/ResourceBundleLocator
    SpringMvc错误:HTTP Status 500
    解决在Tomcat中的server.xml中修改了配置,启动后还原的问题
    SpringMvc参数绑定出现乱码解决方法
  • 原文地址:https://www.cnblogs.com/wuchanming/p/4136986.html
Copyright © 2011-2022 走看看