carloscn / structstudy

Leetcode daily trainning by using C/C++/RUST programming.
4 stars 1 forks source link

leetcode1684: 统计一致字符串的数目(count-the-number-of-consistent-strings) #265

Open carloscn opened 1 year ago

carloscn commented 1 year ago

问题描述

给你一个由不同字符组成的字符串 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 只包含小写英文字母。

来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/count-the-number-of-consistent-strings

carloscn commented 1 year ago

问题描述

fn is_allowed(allowed:&str, word:&str) -> bool
{
    let mut wv:Vec<char> = word.chars().collect();
    let mut e:char;
    wv.sort();

    e = wv[0];
    if wv.len() == 1 {
        return allowed.contains(e);
    }

    for i in 1..word.len() {
        if e == wv[i] {
            continue;
        } else {
            if allowed.contains(wv[i]) {
                e = wv[i];
            } else {
                return false;
            }
        }
    }

    return true;
}

pub fn count_consistent_strings(allowed: &str, words: Vec<&str>) -> i32
{
    if allowed.len() < 1 || words.len() < 1 {
        return 0;
    }

    let mut ret:i32 = 0;
    for e in words {
        if is_allowed(&allowed, e) {
            ret += 1;
        }
    }

    return ret;
}
carloscn commented 1 year ago

code

https://review.gerrithub.io/c/carloscn/structstudy/+/556356 https://github.com/carloscn/structstudy/commit/9b4b1551ecb88cf9900628b46c222f1f2f3f4c36