刷题的日常-统计一致字符串的数目

44 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第8天,点击查看活动详情

刷题的日常-2022年11月28号

一天一题,保持脑子清爽

统计一致字符串的数目

来自leetcode的 1684 题,题意如下:

给你一个由不同字符组成的字符串 allowed 和一个字符串数组 words 。如果一个字符串的每一个字符都在 allowed 中,就称这个字符串是 一致字符串 。

请你返回 words 数组中 一致字符串 的数目。

示例1:

输入:allowed = "ab", words = ["ad","bd","aaab","baa","badab"]
输出:2
解释:字符串 "aaab""baa" 都是一致字符串,因为它们只包含字符 'a''b'

理解题意

通过题意,我们可以将信息整理如下:

  • 题目给出一个字符串 和 一个字符串数组
  • 要求我们通过一个字符串里的字符,来判断数组里的字符是否是一致字符串
  • 一致字符串每一个字符 都是在allowed里出现的,但是数量可以不一致

做题思路

简单题,直接暴力就可以解决。我们可以先将 allowed 里出现的字符进行记录,然后循环匹配数组内的每一个字符串,匹配成功返回的结果加一,步骤如下:

  • 开辟一个数组用于记录出现的字符,将出现的字符位置标为true
  • 循环数组里的每一个字符,进行字符匹配,如果不存在该字符,返回false,如果扫描到最后都存在,返回true
  • 最终结果加一
  • 返回统计的次数

代码实现

代码实现如下:

public class Solution {
    public int countConsistentStrings(String allowed, String... words) {
        boolean[] map = new boolean[26];
        int res = 0;
        for (int i = 0; i < allowed.length(); i++) {
            map[allowed.charAt(i) - 'a'] = true;
        }
        for (String word : words) {
            if (!match(map, word)) {
                continue;
            }
            res++;
        }
        return res;
    }
    private static boolean match(boolean[] map, String word) {
        for (int i = 0; i < word.length(); i++) {
            if (!map[word.charAt(i) - 'a']) {
                return false;
            }
        }
        return true;
    }
}

image.png