LeetCode第3题:利用HashSet和HashMap解决不重复子串问题

需积分: 0 0 下载量 124 浏览量 更新于2024-09-05 收藏 15KB DOCX 举报
"本文档主要讨论了Java高级API中的Set接口及其实现类HashSet在LeetCode第三题中的应用,即寻找最长的不重复子字符串问题。首先,我们明确了Set接口的含义,它是一个不包含重复元素的集合,强调了其去重特性和数学集合的抽象特性。Set接口继承自Collection接口,提供了诸如add、equals、hashCode等基础方法,以及特定于Set的构造函数要求,确保集合元素的独特性。 HashSet是Set接口的典型实现,具有高效查找和插入操作的特点,因为它内部使用哈希表数据结构。文档详细介绍了HashSet的一些常用方法,例如: 1. `public HashSet()`:创建一个空的HashSet实例。 2. `public HashSet(Collection<? extends E> c)`:根据指定集合创建一个新的HashSet,包含集合中的所有元素。 3. `public boolean add(E e)`:向集合中添加元素,若元素不存在则添加成功。 4. `public boolean isEmpty()`:检查集合是否为空。 5. `public void clear()`:清除集合中的所有元素。 6. `public boolean contains(Object o)`:检查集合是否包含指定对象。 7. `public boolean remove(Object o)`:移除指定对象,如果存在的话。 8. `public int size()`:获取集合中元素的数量。 在LeetCode第三题中,利用HashSet可以帮助存储已经遍历过的字符,以判断当前字符是否已经出现过。具体算法思路是遍历字符串,对于每个字符,先检查它是否在HashSet中,如果不在,则将其添加到结果子串和HashSet中,然后继续往后遍历;如果在,就更新子串的起始位置,直到找到一个未重复的子串。这样,通过HashSet的快速查找特性,可以优化查找重复字符的时间复杂度,从而求得最长不重复子串的长度。 总结来说,本文档通过实际编程问题展示了如何巧妙运用HashSet来解决算法问题,体现了Java高级API在数据结构处理和算法设计中的实用价值。对于Java开发者理解和解决这类问题具有较高的参考价值。"

探险家小扣的行动轨迹,都将保存在记录仪中。expeditions[i] 表示小扣第 i 次探险记录,用一个字符串数组表示。其中的每个「营地」由大小写字母组成,通过子串 -> 连接。例:"Leet->code->Campsite",表示到访了 "Leet"、"code"、"Campsite" 三个营地。expeditions[0] 包含了初始小扣已知的所有营地;对于之后的第 i 次探险(即 expeditions[i] 且 i > 0),如果记录中包含了之前均没出现的营地,则表示小扣 新发现 的营地。 请你找出小扣发现新营地最多且索引最小的那次探险,并返回对应的记录索引。如果所有探险记录都没有发现新的营地,返回 -1。注意: 大小写不同的营地视为不同的营地; 营地的名称长度均大于 0。用python实现。给你几个例子:示例 1: 输入:expeditions = ["leet->code","leet->code->Campsite->Leet","leet->code->leet->courier"] 输出:1 解释: 初始已知的所有营地为 "leet" 和 "code" 第 1 次,到访了 "leet"、"code"、"Campsite"、"Leet",新发现营地 2 处:"Campsite"、"Leet" 第 2 次,到访了 "leet"、"code"、"courier",新发现营地 1 处:"courier" 第 1 次探险发现的新营地数量最多,因此返回 1。示例 2: 输入:expeditions = ["Alice->Dex","","Dex"] 输出:-1 解释: 初始已知的所有营地为 "Alice" 和 "Dex" 第 1 次,未到访任何营地; 第 2 次,到访了 "Dex",未新发现营地; 因为两次探险均未发现新的营地,返回 -1

2023-04-23 上传

黑客语(Leet)是从网络发展起来的一种文字书写方式。通常将英语中的字母替换为数字和特殊符号。这种方式被很多黑客组织所使用。由于具有隐密性,所以它也广泛被用于密码中。使用Leet书写的密码,不会增加密码记忆的复杂度,但却可以提高密码的强度。常见的转化规律有,$替换s,3替换e,4替换a,0替换o,1替换i等。例如,cats使用Leet书写,就变为c47$。一个纯字母的密码就转化为字母、数字构成的复杂密码了。 table = ''.maketrans(before, after),这条语句可以创建映射表,str1.translate(table)语句可以将table中的字符按映射表中的顺序进行替换。 替换表如下: 0 1 3 4 5 6 7 o i e a s g t 写一个程序,用于破解一个加密的字符串。M4k3 G006l3 Y0ur H0m3p463!‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬ 输入格式 输入一个加密后的字符串‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬ ‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬ 输出格式 输出破解后的字符串

2023-06-09 上传