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

Posted Tisfy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 1684. 统计一致字符串的数目相关的知识,希望对你有一定的参考价值。

【LetMeFly】1684.统计一致字符串的数目

力扣题目链接:https://leetcode.cn/problems/count-the-number-of-consistent-strings/

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

 

提示:

  • 1 <= words.length <= 104
  • 1 <= allowed.length <= 26
  • 1 <= words[i].length <= 10
  • allowed 中的字符 互不相同 。
  • words[i] 和 allowed 只包含小写英文字母。

方法一:遍历

因为字符集为26个小写英文字母,因此我们开辟大小为 26 26 26的数组,来记录每个字母是否在 a l l o w e d allowed allowed中出现过

bool bin[26] = false;

之后遍历一遍 a l l o w e d allowed allowed,将出现过的字母标记为 t r u e true true

for (char& c : allowed)
	bin[c - 'a'] = true;

接下来就能愉快地处理每一个字符串了

对于字符串数组中的某一个字符串,使用一个变量 o k = t r u e ok = true ok=true来记录字符串是否有“不能出现的字符”

遍历字符串,如果某个字符没有在 a l l o w e d allowed allowed中出现过( b i n bin bin f a l s e false false),那么就将 o k ok ok置为 f a l s e false false并结束遍历这个字符串

若字符串遍历结束 o k ok ok仍为 t r u e true true,那么答案数量就加一

int ans = 0;
for (string& s : words)   // 遍历字符串数组中的每一个字符串s
    bool ok = true;
    for (char& c : s) 
        if (!bin[c - 'a'])   // 未在allowed中出现过的字符出现过
            ok = false;
            break;
        
    
    ans += ok;

  • 时间复杂度 O ( l e n ( a l l o w e d ) + N ) O(len(allowed) + N) O(len(allowed)+N),其中 N N N w o r d s words words中所有字符的个数
  • 空间复杂度 O ( C ) O(C) O(C),其中 C C C是字符集大小,这里为26个小写英文字母 C = 26 C=26 C=26

AC代码

C++

class Solution 
public:
    int countConsistentStrings(string& allowed, vector<string>& words) 
        bool bin[26] = false;
        for (char& c : allowed)
            bin[c - 'a'] = true;
        int ans = 0;
        for (string& s : words) 
            bool ok = true;
            for (char& c : s) 
                if (!bin[c - 'a']) 
                    ok = false;
                    break;
                
            
            ans += ok;
        
        return ans;
    
;

同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/127743936

以上是关于LeetCode 1684. 统计一致字符串的数目的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode1684. 统计一致字符串的数目(C++)

leetcode简单1684统计一致字符串的数目

LeetCode 1684 统计一致字符串的数目[位运算] HERODING的LeetCode之路

算法1684. 统计一致字符串的数目(java / c / c++ / python / go / rust)

算法1684. 统计一致字符串的数目(java / c / c++ / python / go / rust)

「 每日一练,快乐水题 」1684. 统计一致字符串的数目