美文网首页
2021.2.26每日一题

2021.2.26每日一题

作者: Yaan9 | 来源:发表于2021-02-26 09:50 被阅读0次

1178. 猜字谜

外国友人仿照中国字谜设计了一个英文版猜字谜小游戏,请你来猜猜看吧。
字谜的迷面 puzzle 按字符串形式给出,如果一个单词 word 符合下面两个条件,那么它就可以算作谜底:
单词 word 中包含谜面 puzzle 的第一个字母。
单词 word 中的每一个字母都可以在谜面 puzzle 中找到。
例如,如果字谜的谜面是 "abcdefg",那么可以作为谜底的单词有 "faced", "cabbage", 和 "baggage";而 "beefed"(不含字母 "a")以及 "based"(其中的 "s" 没有出现在谜面中)。
返回一个答案数组 answer,数组中的每个元素 answer[i] 是在给出的单词列表 words 中可以作为字谜迷面 puzzles[i] 所对应的谜底的单词数目。
示例:

输入:
words = ["aaaa","asas","able","ability","actt","actor","access"], 
puzzles = ["aboveyz","abrodyz","abslute","absoryz","actresz","gaswxyz"]
输出:[1,1,3,2,4,0]
解释:
1 个单词可以作为 "aboveyz" 的谜底 : "aaaa" 
1 个单词可以作为 "abrodyz" 的谜底 : "aaaa"
3 个单词可以作为 "abslute" 的谜底 : "aaaa", "asas", "able"
2 个单词可以作为 "absoryz" 的谜底 : "aaaa", "asas"
4 个单词可以作为 "actresz" 的谜底 : "aaaa", "asas", "actt", "access"
没有单词可以作为 "gaswxyz" 的谜底,因为列表中的单词都不含字母 'g'。

题解:

CV

    public List<Integer> findNumOfValidWords(String[] words, String[] puzzles) {
        Map<Integer, Integer> frequency = new HashMap<Integer, Integer>();

        for (String word : words) {
            int mask = 0;
            for (int i = 0; i < word.length(); ++i) {
                char ch = word.charAt(i);
                mask |= (1 << (ch - 'a'));
            }
            if (Integer.bitCount(mask) <= 7) {
                frequency.put(mask, frequency.getOrDefault(mask, 0) + 1);
            }
        }

        List<Integer> ans = new ArrayList<Integer>();
        for (String puzzle : puzzles) {
            int total = 0;
            int mask = 0;
            for (int i = 1; i < 7; ++i) {
                mask |= (1 << (puzzle.charAt(i) - 'a'));
            }
            int subset = mask;
            do {
                int s = subset | (1 << (puzzle.charAt(0) - 'a'));
                if (frequency.containsKey(s)) {
                    total += frequency.get(s);
                }
                subset = (subset - 1) & mask;
            } while (subset != mask);

            ans.add(total);
        }
        return ans;
    }

相关文章

  • 2021.2.26每日一题

    1178. 猜字谜[https://leetcode-cn.com/problems/number-of-vali...

  • 每日三言2021.2.26

    1.生命就是各种关系,先在这里处理和自己的关系,然后回到生活中处理和父母的关系,其他人际关系,只是复制,前面改变了...

  • Day 4 Project 我的微信好友

    附:每日一题

  • 2021-02-26

    2021.2.26 党校

  • 60.我在微笑中看见了微笑

    创作于2021.2.26秦岭树

  • 2021.2.26

    今天起来后,想着赶紧收拾一下,一会走的时候在磨磨蹭蹭的麻烦,结果一问我组的人基本都出去了,我就赶紧的出去了,担心大...

  • 2021.2.26

    今天是元宵节,是寒假的最后一天,也是我开始记日记的第一天。 从放寒假开始到今天,差不多两个月了,回望前两个月,...

  • 2021.2.26

    昨晚我在潇潇雨声中睡去,醒来已是今天早上快七点钟了。今天元宵节,公司放假一天,我本想多睡会儿,可窗外传来鸟儿的啁啾...

  • 2021.2.26

    雨中赏花,公园里没有了往日的喧闹!只有远处不停歇的车流声。雨滴落在雨伞上、地上、树叶上……小鸟在欢快的歌唱着! 一...

  • 2021.2.26

    今天心情不太好,各种原因。 投资需要时间,却总有点沉不住气。老陶说要做自己擅长的事情,要不断学习……但是却想打他一...

网友评论

      本文标题:2021.2.26每日一题

      本文链接:https://www.haomeiwen.com/subject/jdcmfltx.html