carloscn / structstudy

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

leetcode771:宝石与石头(jewels-and-stones) #131

Open carloscn opened 1 year ago

carloscn commented 1 year ago

问题描述

给你一个字符串 jewels 代表石头中宝石的类型,另有一个字符串 stones 代表你拥有的石头。 stones 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。

字母区分大小写,因此 "a" 和 "A" 是不同类型的石头。

示例 1: 输入:jewels = "aA", stones = "aAAbbbb" 输出:3 示例 2:

输入:jewels = "z", stones = "ZZ" 输出:0

提示:

1 <= jewels.length, stones.length <= 50 jewels 和 stones 仅由英文字母组成 jewels 中的所有字符都是 唯一的

来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/jewels-and-stones

carloscn commented 1 year ago

问题分析

C 语言版本

static int32_t jewels_and_stones(const char *jewels, const char *stones, size_t *result)
{
    int32_t ret = 0;
    size_t jew_len = 0;
    size_t sto_len = 0;
    size_t i = 0;
    size_t count = 0;

    UTILS_CHECK_PTR(jewels);
    UTILS_CHECK_PTR(stones);
    UTILS_CHECK_PTR(result);
    UTILS_CHECK_LEN(jew_len = strlen(jewels));
    UTILS_CHECK_LEN(sto_len = strlen(stones));

    for (i = 0; i < sto_len; i ++) {
        if (utils_str_contains_char(jewels, stones[i])) {
            count ++;
        }
    }

    *result = count;

finish:
    return ret;
}

RUST 版本

fn jewels_and_stones(jewels:&String, stones:&String) -> Result<usize, &'static str>
{
    let jew_len:usize = jewels.len();
    let sto_len:usize = stones.len();
    let mut count:usize = 0;

    if (0 == jew_len) ||
       (0 == sto_len) {
        return Err("input len is wrong!\n");
    }

    let sto_chars = stones.chars();

    for e in sto_chars {
        if jewels.contains(e) {
            count += 1
        }
    }

    return Ok(count);
}
carloscn commented 1 year ago

code

https://github.com/carloscn/structstudy/blob/master/c_programming/str/n42_jewels_and_stones_771.c https://github.com/carloscn/structstudy/blob/master/rust_programming/str/src/n42_jewels_and_stones_771.rs