简介

使用滑动窗口

https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/solution/hua-dong-chuang-kou-by-powcai/

code

C++

class Solution3 {
public:
int lengthOfLongestSubstring(string s) {
if(s.size() == 0) return 0;
unordered_set<char> lookup;
int maxStr = 0;
int left = 0;
for(int i = 0; i < s.size(); i++){
while (lookup.find(s[i]) != lookup.end()){ // 相当于一个指针先进行左移操作 left , i表示右指针
lookup.erase(s[left]);
left ++;
}
maxStr = max(maxStr,i-left+1); // i 和 left 之间的数组就是我们想要的数据
lookup.insert(s[i]);
}
return maxStr;
}
};
class Solution {
public int lengthOfLongestSubstring(String s) {
if(s.length() == 0) return 0; Set<Character> occ = new HashSet<Character>();
int n = s.length();
int rk = -1, ans = 0;
for(int i = 0; i<n; i++){
if(i!=0){
occ.remove(s.charAt(i - 1));
}
while(rk + 1 < n && !occ.contains(s.charAt(rk + 1))) {
occ.add(s.charAt(rk + 1));
++rk;
}
ans = Math.max(ans, rk - i + 1);
}
return ans;
}
}
class Solution {
public int lengthOfLongestSubstring(String s) {
if(s.length() == 0) return 0; Set<Character> occ = new HashSet<Character>();
int n = s.length();
int left = 0;
int maxStr = 0;
for(int i = 0; i<n; i++){
while(occ.contains(s.charAt(i))) {
occ.remove(s.charAt(left));
left += 1;
}
maxStr = Math.max(maxStr, i - left + 1);
occ.add(s.charAt(i));
}
return maxStr;
}
}

简单注解

简而言之, 可以代入 abcab 和 abcba

对于 abcab

首先进入字符串 扩充阶段 while (lookup.find(s[i]) != lookup.end()) 不起作用 因为 lookup 里面没有可以找到重复的字符

变为 abc maxStr = 3

然后 abc 接着 while (lookup.find( ${a字符} ) != lookup.end()) 进入循环

maxStr 还是3 变为 bca 同理最后变为 cab

abc 插入b 的时候 变为 cb

无重复字符最长子串无重复字符最长子串 leetcode 3的更多相关文章

  1. [剑指Offer]48-最长不含重复字符的子字符串(递归思想,循环实现)

    题意 如题,字符串只含a-z,输出该子串长度.例:"arabcacfr",输出4. 解题思路 递归思想 计f(i)为以第i个字符结尾的最长不含重复字符的子串长度. 状态转移:计d为 ...

  2. 19.Longest Substring Without Repeating Characters(长度最长的不重复子串)

    Level:   Medium 题目描述: Given a string, find the length of the longest substring without repeating cha ...

  3. 剑指offer面试题48: 最长不含重复字符的子字符串

    Given a string, find the length of the longest substring without repeating characters.(请从子字符串中找出一个最长 ...

  4. 《剑指offer》第四十八题(最长不含重复字符的子字符串)

    // 面试题48:最长不含重复字符的子字符串 // 题目:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子 // 字符串的长度.假设字符串中只包含从'a'到'z'的字符. #inclu ...

  5. 【Offer】[48] 【最长不含重复字符的子字符串】

    题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度.假设字符串中只包含'a'~'z'的字符.例如,在字符串&q ...

  6. 剑指offer-面试题48-最长不含重复字符的子字符串-动态规划

    /* 题目: 最长不含重复字符的子字符串. */ /* 思路: f(i) = f(i-1) + 1,(未出现过当前字符,distance > f(i-1) distance,当前字符和上一次出现 ...

  7. 剑指 Offer 48. 最长不含重复字符的子字符串 + 动态规划 + 哈希表 + 双指针 + 滑动窗口

    剑指 Offer 48. 最长不含重复字符的子字符串 Offer_48 题目详情 解法分析 解法一:动态规划+哈希表 package com.walegarrett.offer; /** * @Aut ...

  8. 要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10;

    package text1; import java.util.ArrayList; import java.util.HashSet; /* * 要求产生10个随机的字符串, * 每一个字符串互相不 ...

  9. Web页面长时间无操作后再获取焦点时转到登录界面

    今天开始讲新浪博客搬到博客园.        在工作中遇到的小问题,感觉有点意思,就记录下来吧!        该问题分为两种情况,一.Web页面长时间无操作后,在对其进行操作,比如点击“首页”.“设 ...

  10. .net跨防火墙链接oracle连接池链接长时间无通讯数据被断开后报错问题解决

    环境: .net 4.0以上使用Oracle.ManagedDataAccess组件链接oracle数据库,应用程序与数据库之间存在硬件防火墙. 症状:应用程序启动后正常访问,如果出现长时间无数据库请 ...

随机推荐

  1. 配置Thymeleaf模板引擎

    1).thymeleaf-starter: 关闭缓存 2).静态资源都放在static文件夹下就可以按照路径直接访问 3).页面放在templates下,直接访问 springboot ,访问项目的时 ...

  2. Robot Framework自定义库的创建于应用(全新库)

    场景:新建库文件,库文件内新增方法,用于robot调用执行原始方法内不具备的能力.具体方法图下 1.找到目录C:\Python27\Lib\site-packages 2.新增文件夹"New ...

  3. 牛!达摩院孵化开源项目,让数字人"活"起来:OpenAvatarChat教你轻松搭建自己的数字人

    嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 "只需一台普通电脑,就能让数字人像真人一样与你畅聊!" -- OpenA ...

  4. 【记录】Python3|Windows下Python3.11.0的pybluez安装(用于处理蓝牙模块的数据)

    参考: 官方安装文档:https://github.com/pybluez/pybluez/blob/master/docs/install.rst 仓库的issue447:https://githu ...

  5. 【笔记】libpcap安装与使用

    Ubuntu 20.04. 文章目录 起步 一.下载libpcap 库 二.安装 三.使用 完整程序 (们) 1. 头文件集锦 myheader.h 2. 打印报文内容 sniff.c 3. 嗅探与伪 ...

  6. 【笔记】Python3|爬虫处理网页数据异步加载问题(结合Selenium完成)

    文章目录 问题描述 1. 结合Selenium.Edge解析该网站搜索页面的数据 2. 结合lxml解析网页数据 3. 附加:不是异步加载的网页,结合requests直接请求数据 问题描述 一些网站会 ...

  7. TVM:使用自动调度优化算子

    与基于模板的AutoTVM不同(会依赖手动模板定义搜索空间),自动调度器不需要任何模板.用户只需要编写计算声明,而不需要任何调度命令或模板.自动调度器可以自动生产一个大的搜索空间,并在空间中找到一个好 ...

  8. 鸿蒙仓颉开发语言实战教程:自定义tabbar

    大家周末好呀,今天继续分享仓颉语言开发商城应用的实战教程,今天要做的是tabbar. 大家都知道ArkTs有Tabs和TabContent容器,能够实现上图的样式,满足基本的使用需求.而仓颉就不同了, ...

  9. 从基础到高级,带你结合案例深入学习curl命令

    目录 简介 发送get请求 显示通信过程-v 模仿浏览器 -A 发送 Cookie -b 获取cookie -c 伪造来源页面 -e 构造GET请求查询字符串 -G 添加HTTP请求头 -H 显示头信 ...

  10. QEMU安装巨大的坑

    网上教程大多数让你 sudo apt install qemu 实际上根本没用!!!! 查了一下debian官网 结果 QEMU is a fast processor emulator. Once ...