002. 无重复字符的最长子串(难度:中 题号:3 )

  从 LeetCode 题库挑选、整理的题单,用于自学算法。同一解法中各语言的解题思路本质上是一样的,这里的主要目的是用算法来学习方法、思路,后续再学习补充。
  力扣官网在此(LeetCode官网地址

1.1 题目

3. 无重复字符的最长字串

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(字典):存键值对,可快速通过键查值

  1. 特性
  • 键唯一性:键唯一,值可重复
  • 无序性:字典中的键值对是无序的
  • 可变性:字典可以动态增、删、改键值对。
  • 键类型可以是数字、字符串、元组等不可变类型,但不能是列表或其他可变类型。
  1. 操作
  • 创建:{} 或 dict() 函数
  • 访问:my_dict[‘key’]
  • 增加/修改键值对:my_dict[‘new_key’] = ‘new_value’ —— 直接赋值
  • 删除键值对:del 或 pop() 方法 —— del my_dict[‘city’]
  • 检查键是否存在:in 关键字

set(集合):存单个值(唯一)

  1. 特性
  • 无序性:元素无序,不能通过索引访问。
  • 唯一性:元素唯一,自动去除重复值。
  • 可变性:可动态添加或删除元素。
  • 元素类型:集合中的元素必须是不可变类型(如数字、字符串、元组)
  1. 操作
  • 创建:{} 或 set() 函数 # my_set = {1, 2, 3, 4, 5}
  • 增加:add() #my_set.add(6)
  • 删除:remove() 或 discard() 方法
    #my_set.remove(3) # 若元素不存在,会报错
    #my_set.discard(7) # 若元素不存在,不会报错
  • 集合运算:支持交集(&)、并集(|)、差集(-)等运算。
  • 检查元素是否存在:使用 in 关键字
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我爱挣钱我也要早睡!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值