前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >916. 单词子集(思维)

916. 单词子集(思维)

作者头像
Ch_Zaqdt
发布2020-02-18 12:41:45
2870
发布2020-02-18 12:41:45
举报
文章被收录于专栏:Zaqdt_ACMZaqdt_ACM

题目链接:https://leetcode-cn.com/problems/word-subsets/

      刚看完这道题啥也没想就去敲暴力,然后就超时了,暴力的思路就是用每一个A中的字符串去枚举所有的B中的字符串是否是在a中存在,那么其实我们可以想一下如果对于B集合来说,如果"oo"符合要求的话,那么"o"一定符合要求。所以我们就只需要维护一个最大值就好了,这个最大值的意思就是对于B集合中的每一个b字符串,维护一个最大的出现次数就好了。比如["abcc", "caa", bb]中只需要维护mb["a"] = 2;mb["b"] = 2;mb["c"] = 2就好了。


AC代码:

代码语言:javascript
复制
class Solution {
public:
    map<char,int> mb;
    bool Check(string& str,int& len){
        map<char,int> ma;
        for(int i=0;i<str.length();i++){
            ma[str[i]] ++;
        }
        for(auto i : mb){
          if(ma[i.first] < i.second) return false;
        }
        return true;
    }
    vector<string> wordSubsets(vector<string>& A, vector<string>& B) {
        int lenA = A.size();
        int lenB = B.size();
        for(int i=0;i<lenB;i++){
            map<char,int> m;
            for(int j=0;j<B[i].length();j++){
                m[B[i][j]] ++;
                mb[B[i][j]] = max(mb[B[i][j]], m[B[i][j]]);
            }
        }
        vector<string> ans;
        for(int i=0;i<lenA;i++){
            if(Check(A[i], lenB)){
                ans.push_back(A[i]);
            }
        }
        return ans;
    }
};
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-02-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档