第一题 535. Encode and Decode TinyURL
题目描述
将一个较长的URL 编译为较短的TinyURL, 之后又可以解码回来原来的URL
算法
|
|
第二题 438. Find All Anagrams in a String
题目描述
给定一个字符串s与一个非空字符串p,寻找s中所有p的字谜变换的起始下标。
字符串只包含小写英文字母并且s和p的长度均不超过20100。
输出顺序无所谓。
算法
很重要的一道题目,可以帮助熟悉寻找Substring类型的题目
主要有两种算法,一种是利用HashMap,一种是使用char [256]。原理都是HashMap,处理的方式是使用一个窗口,窗口有Left和right,如果窗口中的情况满足要求了,则输出。如果并不满足,整个窗口移动,并对left边缘的值进行操作
HashMap
hashmap这个思路是找到一个满足要求的长序列,即在这个长序列中,肯定包含了目标String的所有Character但是我们需要对这些character的情况进行验证。
Array
同样的方法,但是这个的窗口大小是固定的,算法思路相似
第三题 76. Minimum Window Substring
题目描述
在一个String中寻找一个Substring包含目标String的所有字符。如果存在多个Substring,找最小的那一个
算法
与之前的题目相似,两种方法,同样利用一个窗口。可以使用相同的模板,只是在细微的地方有所变化
HashMap
利用HashMap的模板是先找到所有包含在LeftPoint 和RightPoint的Substring的范围,然后再按照要求,修改count部分
Array
|
|
第四题 3. Longest Substring Without Repeating Characters
题目描述
给定一个字符串,从中找出不含重复字符的最长子串的长度。例如,”abcabcbb”的不含重复字母的最长子串为”abc”,其长度是3。”bbbbb”的最长子串是”b”,长度为1。
算法
仍然采用滑动窗口的方法,分别用HashMap和Array解决这个问题
HashMap
|
|
Array
|
|
第五题 30. Substring with Concatenation of All Words
题目描述
主字符串S,模式字符串list:L(L中的元素等长,有可能重复),寻找L以任意顺序拼接后得到的字符串在S中的索引。
算法
速度快的复杂的
还没搞懂,鸡儿
利用两个HashMap
|
|
第六题 380. Insert Delete GetRandom O(1)
题目描述
设计一个数据结构支持在O(1)时间内完成如下操作:
insert(val): 如果集合中不包含val,则插入val
remove(val): 如果集合中包含val,则移除val
getRandom: 从现有集合中随机返回一个元素,每个元素被返回的概率应该相等
算法
哈希表 + 数组 (HashMap + Array)
利用数组存储元素,利用哈希表维护元素在数组中的下标
由于哈希表的新增/删除操作是O(1),而数组的随机访问操作开销也是O(1),因此满足题设要求
记数组为dataList,哈希表为dataMap
insert(val): 将val添至dataList末尾,并在dataMap中保存val的下标idx
remove(val): 记val的下标为idx,dataList末尾元素为tail,弹出tail并将其替换至idx处,在dataMap中更新tail的下标为idx,最后从dataMap中移除val
getRandom: 从dataList中随机选取元素返回
|
|