1.题目描述
给你一个由不同字符组成的字符串 allowed 和一个字符串数组 words 。如果一个字符串的每一个字符都在 allowed 中,就称这个字符串是 一致字符串 。
请你返回 words 数组中 一致字符串 的数目。
示例 1:
输入:allowed = "ab", words = ["ad","bd","aaab","baa","badab"]
输出:2
解释:字符串 "aaab" 和 "baa" 都是一致字符串,因为它们只包含字符 'a' 和 'b' 。
示例 2:
输入:allowed = "abc", words = ["a","b","c","ab","ac","bc","abc"]
输出:7
解释:所有字符串都是一致的。
示例 3:
输入:allowed = "cad", words = ["cc","acd","b","ba","bac","bad","ac","d"]
输出:4
解释:字符串 "cc","acd","ac" 和 "d" 是一致字符串。
2.解题思路与代码
2.1 解题思路
非常简单的一道字符串遍历题,首先我们使用一个长度为 26 的 boolean 型的数组 tmp 存放 allowed 中每个字符是否出现,如果出现就在 tmp[allowed.charAt(i)-'a'] 的位置上设置为 true,表示字母出现过。然后遍历字符串数组 words 并对数组中每个字符串的字符进行判断,如果每个字符在 tmp 中的位置上都是 true,表示每个字符都在 allowed 中存在,统计结果加 1,否则存在不一致的字母,不计数。
2.2 代码
class Solution {
public int countConsistentStrings(String allowed, String[] words) {
boolean[] tmp = new boolean[26];
int ans = 0;
for (int i = 0; i < allowed.length(); i++) {
tmp[allowed.charAt(i) - 'a'] = true;
}
outer:for (String word : words) {
for (int i = 0; i < word.length(); i++) {
if (!tmp[word.charAt(i)-'a']) {
continue outer;
}
}
ans++;
}
return ans;
}
}
2.3 测试结果
通过测试
测试结果
3.总结
- 使用 boolean 类型数组统计 allowed 中字符出现的情况
- 遍历 words 数组并并 allowed 中的字符进行比较