题意

Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repeating letters for "abcabcbb" is "abc", which the length is 3. For "bbbbb" the longest substring is "b", with the length of 1.

简单来说就是找出最长不重复子串。比如abcb的最长不重复子串是abcbbb的最长不重复子串是b


题解

1. O(N2)的解法

第一时间想到的就是这种,还是太弱。。。
思路是对于每个位置,都以它为子串的起点向后遍历一次,遇到有重复的就break,然后返回最长的那个。用一个hash表来记录有没有访问过。

int lengthOfLongestSubstring(char* s)
{int ans = 0;for(int i = 0;s[i] != '\0';i ++){bool    hash[200] = {false};int count = 0;for(int j = i;s[j] != '\0';j ++){if(!hash[s[j]]){hash[s[j]] = true;count ++;}elsebreak;}ans = ans > count ? ans : count;}return  ans;
}

2. O(N)的解法

参考了这篇介绍,虽然是英文但是感觉写得很思路很清晰的样子。希望有一天我的思路也能如此清晰。

思路是利用一个额外的空间来保存已经访问过的字符的位置。
首先从左到右扫描整个字符串,同时记录目前所遇到的最长不重复子串,记它的长度为max_len.当扫描的时候,对于每一个遇到的新字符,首先判断它有没有被访问过(利用一个visited数组来判断),如果没有,那么直接把max_len的长度加1,然后将这个字符标记为访问过,同时记录它的位置。如果之前被访问过,那么就有下面两种情况:

  1. 这个被访问过的字符不是目前最长不重复子串的一部分。这时候直接把max_len加1,然后将这个字符之前记录的位置改为现在这个位置就可以了
  2. 如果它是目前的最长不重复子串的一部分,那么新的最长不重复子串就要从这个之前被访问过的字符的下一位开始,这时候要更新max_len,也要更改这个字符的位置记录。
    int max_len = 0,start_max_len = 0,ans = 0;int index[130] = {0};bool    visited[130] = {false};for(int i = 0;s[i] != '\0';i ++)if(!visited[s[i]]){visited[s[i]] = true;index[s[i]] = i;max_len ++;ans = ans > max_len ? ans : max_len;}else{if(index[s[i]] < start_max_len){index[s[i]] = i;max_len ++;ans = ans > max_len ? ans : max_len;}else{start_max_len = index[s[i]] + 1;max_len = i - start_max_len + 1;ans = ans > max_len ? ans : max_len;index[s[i]] = i;}}return  ans;

转载于:https://www.cnblogs.com/xz816111/p/5338209.html

LeetCode Longest Substring Without Repeating Characters相关推荐

  1. [LeetCode] Longest Substring Without Repeating Characters

    Given a string, find the length of the longest substring without repeating characters. For example, ...

  2. LeetCode——Longest Substring Without Repeating Characters

    原问题 Given a string, find the length of the longest substring without repeating characters. Example 1 ...

  3. LeetCode:Longest Substring Without Repeating Characters(最长不重复子串)

    题目链接 Given a string, find the length of the longest substring without repeating characters. For exam ...

  4. LeetCode.3-最长无重复字符子串(Longest Substring Without Repeating Characters)

    这是悦乐书的第341次更新,第365篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Medium级别的第2题Longest Substring Without Repeating Cha ...

  5. [LeetCode]3.Longest Substring Without Repeating Characters

    [题目] Given a string, find the length of the longest substring without repeating characters. For exam ...

  6. LeetCode:3. Longest Substring Without Repeating Characters

    https://leetcode.com/problems/longest-substring-without-repeating-characters/description/ 内容描述: Give ...

  7. LeetCode 第 3 题(Longest Substring Without Repeating Characters)

    LeetCode 第 3 题(Longest Substring Without Repeating Characters) Given a string, find the length of th ...

  8. leetcode(三)—— Longest Substring Without Repeating Characters(最长不重复子串 Python/C++)

    Longest Substring Without Repeating Characters | LeetCode OJ 使用 hash 判重问题首先想到的就是 hash(或者使用 map): 思路: ...

  9. 【贪心】LeetCode 3. Longest Substring Without Repeating Characters

    LeetCode 3. Longest Substring Without Repeating Characters Solution1:我的答案 该方法中哈希表记录的是字符出现的次数.标准的贪心算法 ...

最新文章

  1. 8.0ble设备 android_【胖猴小玩闹】智能门锁与BLE设备安全Part 4:一次BLE智能手环的小玩闹...
  2. 博客目录(python相关)
  3. word粘贴至html特殊字符 粘贴后可能为乱码
  4. Log4--Java日志记录器
  5. EFI模式下安装win8.1系统
  6. 11选5下期算法_玫瑰2020196期福彩3D推荐:双胆2、6,和值看好11
  7. 挽救数据库性能的 30 条黄金法则 | 原力计划
  8. 基于树莓派2代的DIY无线路由器
  9. coreldraw水涟漪怎么做_不懂怎么挑选水处理设备?跟贝斯沃了解这3点再做决定,轻松挑出适合自己的...
  10. 5.1傅里叶展开,傅里叶级数推导--非常棒
  11. WM_CLOSE、WM_DESTROY、WM_QUIT及各种消息投递函数详解
  12. python绘制折线图怎么样填充空白颜色_两条折线图之间填充颜色
  13. 计算机组成原理:原,反,补码,加减运算,溢出判断,符号扩展
  14. Qt 实现画线笔锋效果详细原理
  15. java开发五子棋程序
  16. 【读书笔记】【思考总结】《AKF15条架构原则》
  17. Python爬虫学习 6 —— 使用bs4库爬取大学排名
  18. 记录一次net.ipv4.tcp_tw_recycl快速回收机制导致的tcp连接失败问题
  19. SWPU NSS新生赛(校外通道)
  20. Python 量化投资原来这么简单(5) — A股回测KDJ策略

热门文章

  1. 计算机序号函数,EXCEL函数自动编号/编码单条件和多条件的几种方法
  2. clr 面试_Java中高级面试题及答案
  3. 河北师范大学计算机专业保研率,河北省内13所高校2021届保研率一览
  4. amd r5 m330 linux驱动下载,AMDAMD Radeon(TM) R5 M330 14.502.1014.0000显卡驱动官方正式版下载,适用于win8.1-64-驱动精灵...
  5. python测试程序的qps和响应时间代码_python性能测试,请求QPS测试
  6. 计算机应用虚拟仿真实验答案,虚拟仿真 实验教学+.ppt
  7. php 工厂模式 使用场景,PHP设计模式之工厂模式
  8. 微型计算机的三级存储体系是,简述存储系统的三级存储体系及分级的目的。
  9. spring cloud入门_SpringBoot 入门系列0SpringBoot与SpringCloud技术选型
  10. win7查看隐藏文件_隐藏在电脑里の秘密,放在你眼前,你也发现不了,就是这么奥给力...