LeetCode-Go 题解 771. Jewels and Stones:宝石与石头计数问题

发布时间:2026/11/2 2:53:12

LeetCode-Go 题解 771. Jewels and Stones:宝石与石头计数问题 LeetCode-Go 题解 771. Jewels and Stones宝石与石头计数问题【免费下载链接】LeetCode-Go✅ Solutions to LeetCode by Go, 100% test coverage, runtime beats 100% | LeetCode 题解项目地址: https://gitcode.com/GitHub_Trending/le/LeetCode-Go导读本文围绕 LeetCode-Go 仓库中 771. Jewels and Stones 题解目录 展开完整讲解「宝石与石头」这道哈希表入门题的题意、约束与两类 Go 实现思路。读完本文你将掌握字符串单字符逐一遍历、strings.Contains子串判定与map[rune]bool查表两种解法的时间/空间复杂度差异并能直接运行仓库内置的单测验证结果。一、题目描述给定字符串J表示石头的类型中哪些属于宝石Jewels字符串S表示你拥有的石头Stones。S中每一个字符代表一种你拥有的石头类型需要统计你拥有的石头中有多少颗同时也是宝石。关键约束如下J中的字母互不重复J与S中的所有字符均为字母字母区分大小写例如a与A被视为不同类型的石头S与J的长度至多为 50。示例 1Input: J aA, S aAAbbbb Output: 3S中有 1 个a与 2 个A属于宝石集合{a, A}共 3 颗。示例 2Input: J z, S ZZ Output: 0S中只有大写Z与宝石类型z不匹配大小写敏感结果为 0。二、题目大意给定字符串J代表石头中宝石的类型字符串S代表你拥有的石头。S中每个字符代表一种你拥有的石头类型统计你拥有的石头中有多少颗是宝石。J中的字母不重复J与S中所有字符都是字母且字母区分大小写因此a与A是不同类型的石头。三、解题思路这是一道典型的哈希表入门题核心任务是在S中统计落在宝石集合J内的字符个数。仓库中提供了两种解法均可在 771. Jewels and Stones.go 中查看完整源码。解法一strings.Contains 逐字符判定// 解法一 func numJewelsInStones(J string, S string) int { count : 0 for i : range S { if strings.Contains(J, string(S[i])) { count } } return count }该实现直接利用标准库strings.Contains遍历S的每一个字节将S[i]转为字符串后判断其是否作为子串出现在J中。由于J中字母互不重复且长度不超过 50Contains内部的字节级扫描开销很小写法最简洁时间复杂度为 O(|S| × |J|)空间复杂度 O(1)注意string(S[i])将单个字节转换为字符串再参与子串匹配这保证了大小写敏感的行为与题目要求一致。解法二map 缓存宝石类型// 解法二 func numJewelsInStones1(J string, S string) int { cache, result : make(map[rune]bool), 0 for _, r : range J { cache[r] true } for _, r : range S { if _, ok : cache[r]; ok { result } } return result }该实现先遍历J用map[rune]bool记录所有宝石类型再遍历S通过一次 map 查找判断当前石头是否为宝石。两次遍历均为线性时间复杂度 O(|J| |S|)空间复杂度 O(|J|)用rune而非byte作为 key对 ASCII 字母场景二者等价但语义上更贴近字符类型的定义当字符串长度接近题目上限 50 时map 版本的查找优势开始显现是更可扩展的实现。两种解法对比维度解法一Contains解法二map时间复杂度O(S× |J|)O(J |S|)空间复杂度O(1)O(|J|)代码量更短稍长但语义清晰适用场景数据量小、追求极简字符串更长或需要反复查询四、测试用例验证仓库为本题配套了单测文件 771. Jewels and Stones_test.go覆盖了题目给出的两个官方示例qs : []question771{ { para771{aA, aAAbbbb}, ans771{3}, }, { para771{z, ZZ}, ans771{0}, }, }测试函数Test_Problem771对每个用例分别调用numJewelsInStones与numJewelsInStones1验证两种解法的输出与预期答案一致。其中第一个用例同时覆盖了大小写敏感这一关键约束a与A都被统计而b不计入。运行方式进入仓库根目录后执行go test -v -run Test_Problem771 ./leetcode/0771.Jewels-and-Stones/仓库根目录下的 gotest.sh 脚本则演示了覆盖全仓库所有题解的标准测试命令go test -covermodeatomic -coverprofilecoverage.txt ./leetcode/...运行环境以 go.mod 声明的 Go 1.19 及以上版本为前提。五、小结771 题虽然难度为 Easy但完整覆盖了哈希表解题的典型套路将集合判定问题转化为查表问题用空间换时间。解法一适合快速作答解法二则体现了可扩展的工程化写法。配合仓库中的单测读者可以随时回归验证并以此为模板理解后续更多哈希表类题目如 217. Contains Duplicate、242. Valid Anagram的解题思路。【免费下载链接】LeetCode-Go✅ Solutions to LeetCode by Go, 100% test coverage, runtime beats 100% | LeetCode 题解项目地址: https://gitcode.com/GitHub_Trending/le/LeetCode-Go创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/30 9:01:45

工业数据集标准化全流程实战:从原始数据接入到质量验证

核数聚这个项目,说实话最开始并没有叫这么正式的名字。当时就是工厂给我们提了一个需求:要把设备监测、工艺参数、质检记录这些数据统一起来,做成一份"能喂给模型"的东西。等我把现场数据拉出来一看,才发现这事远比想象…

2026/11/1 11:17:54

多模型路由四层架构:从LiteLLM到智能引擎的选型指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 13:57:07

可信计算与TPM:信任链、PCR、远程证明及vTPM回滚

简介:这份华中科技大学可信计算线上测试题目及答案,面向网络安全与可信计算课程复习备考人群,围绕理论模型、TPM与TSS、Hash算法、对称与非对称加密、PKI、PCR及平台状态报告等考点,整理题目与参考答案,便于核对概念、…

2026/11/2 13:57:07

智能驾驶VLA2.0系统:从感知到理解的突破

1. 项目概述:当汽车开始思考物理世界 去年冬天我在广州试驾小鹏X9时,车辆在暴雨中自动识别出被积水淹没的车道线,这个场景让我意识到智能驾驶正在经历一场质变。传统基于规则和感知的智驾系统,与这种能理解物理世界的AI存在本质区…

2026/11/2 13:57:07

半结构化数据挖掘:算法、性能优化与实战应用

1. 半结构化数据在大数据环境中的核心价值半结构化数据作为介于结构化与非结构化数据之间的特殊形态,在大数据领域扮演着关键角色。与严格遵循关系模型的传统结构化数据不同,半结构化数据通过标签(Tag)、标记(Markup&a…

2026/11/2 13:57:07

UG NX界面设计与高效操作技巧解析

1. UG NX用户界面概述UG NX(现称Siemens NX)作为工业设计领域的标杆软件,其用户界面设计经历了三十余年的迭代优化。我第一次接触NX是在2012年,当时就被其独特的"带状工具栏"设计所吸引。与同类CAD软件相比,…

2026/11/2 13:57:07

Qt SVG图标动态着色与主题化资源系统实现

1. 先厘清问题边界:图标颜色为什么不能写死1.1 一个典型的需求现场做桌面端主题化的时候,最先炸的往往不是布局,也不是字体,而是图标。深色主题一开,原本灰黑色的图标直接消失在背景里;强调色一换&#xff…

2026/11/2 13:52:05

BlenderDataVis:用Blender原生节点实现三维数据物理化可视化

1. 项目概述:这不是又一个“点几下就出图”的可视化玩具BlenderDataVis——光看名字,很多人第一反应是“哦,Blender里搞个柱状图贴模型上?”或者“是不是把Excel数据拖进去自动生成动画?”我第一次看到这个插件名时也这…

2026/11/2 6:08:01

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/2 6:39:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 1:04:04

工业级SPI隔离设计:硬件抗扰与信号完整性实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 1:04:04

PLFM_RADAR:主动探测数据通道,构建低误报的数据感知系统

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 1:04:04

工业SPI隔离设计:MAX14431与STM32F746硬件抗干扰实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/2 6:08:01

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/2 6:39:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑