【题目】

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.

【分析】

从左到右扫描,当遇到重复字母时,以上一个重复字母的index+1,作为新的搜索起始位置,直到最后一个字母。

【代码】

/*********************************
*   日期:2015-01-20
*   作者:SJF0115
*   题目: 3.Longest Substring Without Repeating Characters
*   网址:https://oj.leetcode.com/problems/longest-substring-without-repeating-characters/
*   结果:AC
*   来源:LeetCode
*   时间复杂度:O(n)
*   空间复杂度:O(1)
*   博客:
**********************************/
#include <iostream>
#include <cstring>
using namespace std;class Solution {
public:int lengthOfLongestSubstring(string s) {int len = s.length();if(len <= 1){return len;}//ifbool visited[256];// 初始化memset(visited,false,sizeof(visited));// 计算int max = 0,cur = 0,start = 0;for(int i = 0;i < len;){// 没有元素和该元素重复if(!visited[s[i]]){visited[s[i]] = true;++cur;++i;}//ifelse{// 更新最大长度if(cur >= max){max = cur;}//ifcur = 0;memset(visited,false,sizeof(visited));int index = 0;// 寻找之前重复元素的下一个元素的下标for(int j = start;j < i;++j){if(s[i] == s[j]){index = j+1;break;}//if}//forstart = index;i = index;}}//forif(cur > max){max = cur;}//ifreturn max;}
};int main(){Solution solution;string str("abbacdafg");int result = solution.lengthOfLongestSubstring(str);// 输出cout<<result<<endl;return 0;
}

【代码二】

class Solution {
public:int lengthOfLongestSubstring(string s) {int len = s.length();if(len <= 1){return len;}//if// 记录上次出现的位置int last[256];// 初始化memset(last,-1,sizeof(last));// 计算int max = 0,cur = 0,start = 0;for(int i = 0;i < len;++i){// 有元素和该元素重复if(last[s[i]] >= 0){if(cur > max){max =cur;}//if// 当遇到重复字母时,以上一个重复字母的index+1,// 作为新的搜索起始位置i = last[s[i]] + 1;cur = 0;memset(last,-1,sizeof(last));}//if++cur;last[s[i]] = i;}//forif(cur > max){max = cur;}//ifreturn max;}
};

【分析三】

对上一个思路继续进行优化。

在上一个思路中当遇到重复字母时,以上一个重复字母的index+1,作为新的搜索起始位置。上一个重复字母的下一个字母到当前字母可以不用重复遍历。

在本思路中搜索起点不是上一个重复字母的index+1而是当前字母。

通过记录上一个Lonest Substring Without Repeating Characters的起点,来计算出在当前字母时的长度。

【代码三】

class Solution {
public:int lengthOfLongestSubstring(string s) {int len = s.length();if(len <= 1){return len;}//if// 记录上次出现的位置int last[256];// 初始化memset(last,-1,sizeof(last));// 计算int max = 0,cur = 0,start = 0;for(int i = 0;i < len;++i){int pos = (int)s[i];// 有元素和该元素重复if(last[pos] >= start){// not last[pos] >= 0// 更新长度cur = cur - (last[pos] - start);// 更新起点start = last[pos] + 1;}//ifelse{++cur;}// 更新字符位置last[pos] = i;if(cur > max){max =cur;}//if}//forreturn max;}
};

[LeetCode]3.Longest Substring Without Repeating Characters相关推荐

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

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

  2. LeetCode:3. Longest Substring Without Repeating Characters

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

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

    Given a string, find the length of the longest substring without repeating characters. Examples: Giv ...

  4. leetcode 3. Longest Substring Without Repeating Characters 最长非重复子串的长度 滑动窗口法

    题目链接 根据我们之前介绍的滑动窗口法的解法: 滑动窗口法详解 leetcode 438. Find All Anagrams in a String 滑动窗口法 这题,我们不难解决,使用之前的模板. ...

  5. python刷leetcode_零基础python刷leetcode -- 3. Longest Substring Without Repeating Characters

    算法很重要,但是每天也需要学学python,于是就想用python刷leetcode 的算法题,和我一起开始零基础python刷leetcode之旅吧.如有不对的地方,希望指正,万分感谢~~ 题目 最 ...

  6. leetcode 3. Longest Substring Without Repeating Characters | 3. 无重复字符的最长子串(双指针+滑窗)

    题目 https://leetcode.com/problems/longest-substring-without-repeating-characters/ 题解 双指针+滑窗,维护一个 set, ...

  7. LeetCode 3 Longest Substring Without Repeating Characters 区间,想法 难度:1

    https://leetcode.com/problems/longest-substring-without-repeating-characters/ 思路:从某点结束所能取到的最早开头是到目前出 ...

  8. leetcode 3. Longest Substring Without Repeating Characters

    记得这要+1,j = std::max(j,container[s[i]]+1); class Solution { public:int lengthOfLongestSubstring(strin ...

  9. [LeetCode] 3. Longest Substring Without Repeating Characters 题解

    问题描述 输入一个字符串,找到其中最长的不重复子串 例1: 输入:"abcabcbb" 输出:3 解释:最长非重复子串为"abc" 复制代码 例2: 输入:&q ...

最新文章

  1. 数据类型对应的字节数
  2. UA MATH563 概率论的数学基础 中心极限定理4 独立一元随机变量的性质
  3. ASP.NET中IP地址,当前用户的方法属性大整合- -
  4. crypto-RSA
  5. CentOS7 安装并使用Ovirt 4.2
  6. OFDM仿真程序,可直接运行,注释详细(没人注释比我还详细了)
  7. suse linux修改ftp端口,suse Linux系统下的网络设置(ftp telnet xmanager)
  8. php curl显示错误信息,php如何调试curl错误信息
  9. 2021年黑龙江高考成绩查询,黑龙江省招生考试信息港:2021年黑龙江高考成绩查询入口、查分系统...
  10. Centos 安装libreoffice 以及 word转pdf转html转epub转txt
  11. bluem2.com引擎mysql,蓝色bluem2引擎登录器配置教程详细,bluem2列表格式
  12. 数据结构实验二---单链表的实现
  13. 计算机考试表格函数应用题,2017年职称计算机考试Excel练习题2
  14. 2021年下半年软考真题软件设计师真题答案(下午题)
  15. python数据录入和分析_基于 Python 和 Pandas 的数据分析(3) --- 输入/输出 基础
  16. 微信机器人服务器成本,微信机器人案例汇总
  17. Realtek USB无线网卡能搜到WiFi 无法连接到网络
  18. Ubuntu 安装Docker 常用命令
  19. 微众银行AI团队领衔推动人工智能国际标准的制定
  20. Linux Shell中的变量-环境变量

热门文章

  1. stm32f103r6最小系统原理图_电气工程师电气系统设计与电气设备的选择
  2. java读取classpath配置文件_SpringBoot2.x入门教程:理解配置文件
  3. java 自定义对话框_Java经典实例:用户自定义对话框
  4. sftp进入指定目录_CentOS7服务搭建----搭建SFTP(安全文件传送协议)服务器
  5. Matlab学习笔记——find()函数
  6. css字体更小 css比12px更小的方法
  7. Python自学笔记-列表生成式(来自廖雪峰的官网Python3)
  8. hdu 1043 Eight 搜索,哈希
  9. kvm虚拟化技术下虚拟机磁盘的数据保护
  10. transmit failed error code:65