简介

使用滑动窗口

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. 定时任务稳定性解决方案-healthchecks监控系统

    背景 目前crontab出现问题后无感知,发现问题不及时,几乎是靠业务部门或用户反馈的方式,研发部门再排查的方式,处理问题.发现问题相对滞后,由此可见需要进一步优化crontab的稳定性,降故障通知前 ...

  2. STM32F407数据手册中文版,STM32F429数据参考手册中文版

    发布一个适用STM32F405XX.STM32F407XX.STM32F415XX.STM32F417XX.STM32F427XX.STM32F437XX的中文数据手册,具体内容见下图: 首页 目录 ...

  3. 74.8K star!这个开源图标库让界面设计效率提升10倍!

    嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 Font Awesome 是全球最受欢迎的图标库和工具包,提供超过2000个免费图标和700 ...

  4. 领域驱动的事实与谬误 一 DDD 与 MVC

    本文有以下几个目的: 让新手少交智商税,少浪费时间看一些软文. 普及一个基本概念:了解一项观点的提出年代和最初初衷,才能更好地掌握其精粹. 我想指出市场上一些误人子弟的软文. 首先说明:文中所说的谬误 ...

  5. C# 中 WebSocket 与 SignalR:实时通信的两种选择

    在现代 Web 应用中,实时通信变得越来越重要.无论是聊天应用.在线游戏.股票行情推送还是协作编辑工具,都需要服务器能够主动向客户端推送数据.在 .NET 生态系统中,WebSocket 和 Sign ...

  6. 智能点餐助手平台:CodeBuddy模型驱动的技术革新

    我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 引言 在当代互联网技术高速发展 ...

  7. eclipse界面混乱还原方法

    WindowPerspectiveReset Perspective

  8. Seata源码—8.Seata Saga模式的事务处理

    大纲 1.Seata Saga案例简介 2.Seata Saga案例的状态机定义分析 3.Seata Saga分布式事务与状态机关系 4.Seata Saga案例的Dubbo服务调用配置分析 5.Se ...

  9. 如何在AutoCAD Electrical中修改项目描述中的行号

    默认情况下,项目描述对话框中都会以行号+数字的形式显示,如下图所示: 1.打开记事本程序,按照以下格式收入文字: LINE1=设计 LINE2=制图 LINE3=校对 LINE4=审核 LINE5=工 ...

  10. 堆排序算法Java实现

    摘要 介绍堆排序的基本概念及其实现. 前言   排序大的分类可以分为两种:内排序和外排序.在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序.这里讲的排序是内排序 ...