leetcode 691.Stickers to Spell Word

来源:互联网 发布:公安网络监控电路板 编辑:程序博客网 时间:2024/06/14 21:46

先附模仿代码 也是自己敲出来的

class Solution {

public:

    int helper(vector<vector<int>> map,string target,unordered_map<string,int>&dp)

    {

        if (dp.count(target))return dp[target];

        if(target.size()==0)

            return0;

        vector<int> tar(26,0);

        for(char c:target)

            tar[c-'a']++;

        

        int re=0;

        for(int j=0;j<=25;j++)

        {

            if(tar[j]==0)

                continue;

            int flag=0;

            for(int i=0;i<=map.size()-1;i++)

            {

                if(map[i][j]>0)

                {

                    flag=1;

                    break;

                }

            }

            if(flag==0)

                re=-1;

        }

        if(re==-1){

            dp[target]=-1;

            return -1;

        }

        int res=INT_MAX;

        for(int i=0;i<=map.size()-1;i++)

        {

            if(map[i][target[0]-'a']==0)

                continue;

            //cout<<""<<i<<""<<endl;

            string newone;

            for(int j=0;j<=25;j++)

                if(tar[j]>map[i][j])

                    newone+=string(tar[j]-map[i][j],'a'+j);

            int k=helper(map, newone,dp)+1;

            res= res<k? res:k;

        }

        dp[target]=res;

        return res;

    }

    int minStickers(vector<string>& stickers,string target) {

        int size=(int)stickers.size();

        vector<vector<int>> map(size,vector<int>(26,0));

        for(int i=0;i<=size-1;i++)

        {

            for(char c:stickers[i])

                map[i][c-'a']++;

        }

        unordered_map<string,int>dp;

        dp[""]=0;

        returnhelper(map, target,dp);

    }

};

代码很乱  还需要编辑 再写一下思路 不过现在脑子有点乱 还是稍后再编辑