从 LeetCode 题库挑选、整理的题单,用于自学算法。同一解法中各语言的解题思路本质上是一样的,这里的主要目的是用算法来学习方法、思路,后续再学习补充。
力扣官网在此(LeetCode官网地址)
1.1 题目
1.2 题解
思路:滑动窗口(队列)
让元素依次进入队列,当不满足要求时,移动队列,即 “ 移出队列的左边的元素 ”
#Python
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
char_index = dict()
max_length = 0
left = 0
for right, char in enumerate(s):
if char in char_index:
left = max(left, char_index[char] + 1)
char_index[char] = right
max_length = max(max_length, right - left + 1)
return max_length
//Java
public int lengthOfLongestSubstring(String s){
int left = 0; //左边界
int max_length = 0; //无重复子串的最大长度
if(s.length() == 0) return 0;
HashMap<Character, Integer> map = new HashMap<>();
for(int i = 0; i < s.length(); i++){
if(map.containsKey(s.charAt(i)))
left = Math.max(left, map.get(s.charAt(i)) + 1);
map.put(s.charAt(i), i);
max_length = Math.max(max_length, i-left+1);
}
return max_length;
}
Python 知识补充
dict(字典):存键值对,可快速通过键查值
- 特性
- 键唯一性:键唯一,值可重复
- 无序性:字典中的键值对是无序的
- 可变性:字典可以动态增、删、改键值对。
- 键类型可以是数字、字符串、元组等不可变类型,但不能是列表或其他可变类型。
- 操作
- 创建:{} 或 dict() 函数
- 访问:my_dict[‘key’]
- 增加/修改键值对:my_dict[‘new_key’] = ‘new_value’ —— 直接赋值
- 删除键值对:del 或 pop() 方法 —— del my_dict[‘city’]
- 检查键是否存在:in 关键字
set(集合):存单个值(唯一)
- 特性
- 无序性:元素无序,不能通过索引访问。
- 唯一性:元素唯一,自动去除重复值。
- 可变性:可动态添加或删除元素。
- 元素类型:集合中的元素必须是不可变类型(如数字、字符串、元组)
- 操作
- 创建:{} 或 set() 函数 # my_set = {1, 2, 3, 4, 5}
- 增加:add() #my_set.add(6)
- 删除:remove() 或 discard() 方法
#my_set.remove(3) # 若元素不存在,会报错
#my_set.discard(7) # 若元素不存在,不会报错- 集合运算:支持交集(&)、并集(|)、差集(-)等运算。
- 检查元素是否存在:使用 in 关键字
131

被折叠的 条评论
为什么被折叠?



