Leet Code 1684. 统计一致字符串的数目

发布时间 2023-06-08 22:32:31作者: snolin
/**
 * 1684. 统计一致字符串的数目
 * 
 * 给你一个由不同字符组成的字符串 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" 是一致字符串。
 */
public class Solution19 {
    // 暴力
    public int countConsistentStrings1(String allowed, String[] words) {
        int res = 0;
        for (String word : words) {
            boolean flag = true;
            char[] chars = word.toCharArray();
            for (char c : chars) {
                if (allowed.indexOf(c) < 0) {
                    flag = false;
                    break;
                }
            }
            if (flag) {
                res++;
            }
        }
        return res;
    }

    // 用数组替代了hash表 看的题解
    public int countConsistentStrings(String allowed, String[] words) {
        boolean has[] = new boolean[128];
        for (char c : allowed.toCharArray()) {
            has[c] = true;
        }
        int ans = 0;
        for (int i = 0; i < words.length; i++) {
            ans++;
            for (char c : words[i].toCharArray()) {
                if (!has[c]) {
                    ans--;
                    break;
                }
            }
        }
        return ans;
    }
}