开启掘金成长之旅!这是我参与「掘金日新计划 · 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;
}
}