当前位置: 首页 > news >正文

力扣Leetcode:3. 无重复字符的最长子串(C++、Python)

链接

https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/

题目描述

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。

思路

使用递推的方法,充分利用之前的结论,避免重复计算,可以在最大程度上降低时间复杂度。

具体地,我们先以第一个位置为起点,向后查找最长的符合要求的子串[0…i]。那么接下来如何由这一结论推出以第二个位置为起点的最大子串长度呢?我们注意到,前一步遍历其实已经保证了[0…i]中不存在重复元素。我们如果把起点向右移动一个单位,其实相当于少了一个元素,因此再向后查找的时候允许与该元素重复了,相当于放开了一些限制。

代码

Python

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        occ = set()
        curr = 0
        r = 0
        for l in range(len(s)):
            while r < len(s) and s[r] not in occ:
                occ.add(s[r])
                r += 1
            curr = max(curr, r - l)
            occ.remove(s[l])
        return curr

C++

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
		int mark[128], len=s.length(), max=0, r=0;
		for(int i=0; i<128; i++) {
			mark[i]=0;
		}
		for(int l=0; l<len; l++) {
			if(l>0) {
				mark[int(s[l-1])]--;
			}
			while(r<len && !mark[int(s[r])]) {
				mark[int(s[r++])]++;
			}
			max = (r-l)>max?(r-l):max;
		}
		return max;
    }
    
};

相关文章:

  • 一只狼与羊的爱情(思考栏首篇)
  • 2020计算机专业保研夏令营面经:复旦计算机(含机考题目详细题解)
  • 用JMX管理你的web应用
  • 高级人工智能.Modus Pones定理完备性证明(详细)
  • 高级人工智能.归结原理完备性证明(详细)
  • 年前的高中同学聚会
  • 力扣Leetcode:45. 跳跃游戏 II(Python)
  • JMX入门之StandardMBean HelloWord
  • 力扣Leetcode:1. 两数之和(C++、Python、Java)
  • 最长公共子序列
  • 国科大.图像处理.期末复习笔记手稿
  • 喝茶减少电脑对自身的伤害
  • 2020计算机专业保研夏令营面经:南科大计算机
  • 无耻的愤怒
  • 力扣Leetcode:2. 两数相加(C++、Python、Java)
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • 【RocksDB】TransactionDB源码分析
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • Electron入门介绍
  • FineReport中如何实现自动滚屏效果
  • k8s 面向应用开发者的基础命令
  • Laravel核心解读--Facades
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • 阿里云应用高可用服务公测发布
  • 对象引论
  • 区块链将重新定义世界
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • ionic异常记录
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • 整理一些计算机基础知识!
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • ​水经微图Web1.5.0版即将上线
  • (1)Android开发优化---------UI优化
  • (4) PIVOT 和 UPIVOT 的使用
  • (C)一些题4
  • (cljs/run-at (JSVM. :browser) 搭建刚好可用的开发环境!)
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (笔试题)分解质因式
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (已解决)什么是vue导航守卫
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转)Linq学习笔记
  • (转)视频码率,帧率和分辨率的联系与区别
  • (转载)从 Java 代码到 Java 堆
  • **PHP分步表单提交思路(分页表单提交)
  • .NET MVC之AOP
  • .net开发引用程序集提示没有强名称的解决办法
  • /var/log/cvslog 太大
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • @Controller和@RestController的区别?
  • @DataRedisTest测试redis从未如此丝滑