题意

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. 开发日记-20190514 关键词 汇编语言(七)
  2. DatagridView内容自动换行和换行符换行
  3. 谈服务发现的背景、架构以及落地方案
  4. 计算机网络第4版潘爱民_学术活动 钱江会计实务精英讲坛预告(第84期)| 何继昌 : 战略视角下之财务分析应用实践 兼选股案例分享...
  5. highchart 柱状图,列宽自适应(x轴是时间的特殊情况)
  6. IOS开发之----常用函数和常数--秀清
  7. Android 4.4及以上系统下应用的状态栏颜色渐变效果的实现
  8. python json序列化对象_Python学习之json序列化
  9. 安卓蓝牙键盘切换输入法_采用国产机械轴,三种连接模式轻松切换,TT G521上手体验...
  10. 缺少Python27_d.lib的解决方法
  11. 关于线程堆栈大小的注意事项-转
  12. DevExpress v17.2新版亮点——XAF篇
  13. 如何将3dmax结合前端_如何将阅读与写作结合
  14. CF986F Oppa Funcan Style Remastered
  15. Sql server 数量累计求和
  16. 怎么查微信公众号服务器,微信公众号查询数据库,微信公众号数据库怎么查询?...
  17. 按键精灵学习如何偷菜示例基本代码
  18. SitePoint播客#126:蛋黄在我们身上
  19. 引起计算机故障的因素有哪些,电源故障引起的电脑问题有哪些
  20. 【基础算法】二叉树相关题目

热门文章

  1. 宝塔清mysql主从日志_宝塔面板Mysql主从日志文件mysql-bin文件清除方法
  2. 小程序引入的echarts过大如何解决_解决微信小程序引用echarts视图模糊的问题
  3. 手机号段对应地区编码_漫画:“哈夫曼编码” 是什么鬼?
  4. docker启动后自动退出_Spring Boot项目启动后如何自动执行逻辑
  5. java 隐藏cmd_bat启动java程序 可以隐藏cmd窗口
  6. window 服务器不稳定,服务器Windows系统突发情况的解决办法
  7. linux获取主板温度电压_自学修电脑:常见主板报警声解析!
  8. data-index在react里怎样表达_如何自我训练,提高表达能力
  9. jquery ajax传值和后台取参数
  10. liferay 几个工具类