写点什么

【LeetCode】统计一致字符串的数目 Java 题解

作者:Albert
  • 2022-11-20
    北京
  • 本文字数:886 字

    阅读完需:约 3 分钟

题目描述

给你一个由不同字符组成的字符串 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" 是一致字符串。
复制代码

思路分析

  • 今天的算法题目是字符串处理题目,题目要求计算出一致字符串的长度。当一个字符串的每一个字符都在 allowed,就是一致字符串。

  • 这个问题需要判断的就是包含的关系,我们可以使用 HashSet 或者 HashMap 来解决。HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。HashSet 基于 HashMap 来实现的,是一个不允许有重复元素的集合。结合这个题目的场景,我们使用 HashSet。首先遍历 allowed 构造成 hashset 结构,然后分别遍历 words 中的每一个 word 判断字符是否在 allowed 中。如果满足条件,则答案递增。具体实现代码如下,供参考。

通过代码

class Solution {    public int countConsistentStrings(String allowed, String[] words) {        int ans = 0;        Set<Character> set = new HashSet<>();        for (char c : allowed.toCharArray()) {            set.add(c);        }        for (String word : words) {            boolean flag = true;            for (char ch : word.toCharArray()) {                if (!set.contains(ch)) {                    flag = false;                    break;                }            }            if (flag) {                ans++;            }        }
return ans; }}
复制代码

总结

  • 普通算法的时间复杂度是 O(n),空间复杂度是 O(n)。

  • 坚持算法每日一题,加油!

发布于: 刚刚阅读数: 3
用户头像

Albert

关注

数据结构和算法爱好者 2019-09-29 加入

LeetCode,略懂后端的RD

评论

发布
暂无评论
【LeetCode】统计一致字符串的数目Java题解_算法_Albert_InfoQ写作社区