问题描述:

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

Examples:

Given "abcabcbb", the answer is "abc", which the length is 3.

Given "bbbbb", the answer is "b", with the length of 1.

Given "pwwkew", the answer is "wke", with the length of 3. Note that the answer must be a substring, "pwke" is a subsequence and not a substring.

给出一个字符串,找到它的最长无重复子序列长度。

思路1

从下标0开始,依次查找以当前下标开始的最长不重复子序列。

举例说明:

C++代码实现:

int GetMaxLength(string& sTemp, int startIndex)
{map<char, int> mapChar;int max = 0;for (int i = startIndex; i < sTemp.length(); ++i){if (mapChar.find(sTemp[i]) != mapChar.end())return max;mapChar[sTemp[i]] = i;++max;}return max;
}int lengthOfLongestSubstring(string s)
{int max = 0;for (int i = 0; i < s.length(); ++i){int temp = GetMaxLength(s, i);if (temp > max)max = temp;}return max;
}

思路2

设当前检测的子序列,下标最小值为m,最大值为n(即子串strInput[m,n]),则当前检测序列的长度为n-m+1。

如果该序列中没有重复元素,那么它的长度可以作为最长无重复子序列长度的一个候选值(如果后来有的序列长度超过了它,就替换掉)

我们设当前检测序列的起始下标为now,遍历整个字符串,遍历中当前下标为i;如果可以保证从now到i中没有重复元素,遍历一次,就可以利用i-now+1找到最长无重复子序列。

使now从0开始,后移遍历下标i,直到strInput[now,i]中出现重复的字符,更新now的值,将now移动到重复字符第一次出现的下标后即可。

举例说明:

可以将字符和下标存入哈希表中,这样在查找新加入的字符是否在原始检索串中存在时,时间复杂度为1。

C++代码实现:

int lengthOfLongestSubstring(string s)
{int maxLength = 0;int now = 0;map<char, int> charMap;for (int i = 0; i < s.length(); ++i){if (charMap.find(s[i]) != charMap.end()){now = charMap[s[i]] + 1 > now ? charMap[s[i]] + 1 : now;}if (i - now + 1>maxLength){maxLength = i - now + 1;}charMap[s[i]] = i;}return maxLength;
}

思路2优化

由于在C++中字符和数字转换非常简单,所以,可以用一个数组来替代哈希表:

C++代码实现:

int lengthOfLongestSubstring(string s)
{int maxLength = 0;int now = 0;int charMap[256];for (int i = 0; i < 256; ++i){charMap[i] = -1;}const char *p = s.c_str();for (int i = 0; i < s.length(); ++i){if (charMap[p[i]] != -1){now = charMap[p[i]] + 1 > now ? charMap[p[i]] + 1 : now;}if (i - now + 1>maxLength){maxLength = i - now + 1;}charMap[p[i]] = i;}return maxLength;
}

转载于:https://www.cnblogs.com/zhaogl/p/6364654.html

Longest Substring Without Repeating Characters(最长不重复子序列求解)相关推荐

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

    Description Given a string, find the length of the longest substring without repeating characters. 给 ...

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

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

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

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

  4. leetcode算法—无重复字符的最长子串 Longest Substring Without Repeating Characters

    关注微信公众号:CodingTechWork,一起学习进步. 题目 Longest Substring Without Repeating Characters: Given a string, fi ...

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

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

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

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

  7. LeetCode:3. Longest Substring Without Repeating Characters

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

  8. Leet Code OJ 3. Longest Substring Without Repeating Characters

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

  9. LeetCode Longest Substring Without Repeating Characters

    题意 Given a string, find the length of the longest substring without repeating characters. For exampl ...

最新文章

  1. 区块链基础--工作量证明
  2. 除非换行符在格式字符串中,否则为什么在调用后printf不会刷新?
  3. 您的安全设置不允许网站使用安装在您的计算机上的ActiveX控件的解决方法
  4. windows bat脚本中调用Cygwin并执行命令
  5. Ubuntu虚拟机磁盘扩容+VM虚拟机开机多出1分30秒的解决方案(终极教程)
  6. 结合实例学习F#(二) --基本数据类型Discriminated Unions
  7. 机器学习视频课程(超清完整11周)分享给大家!
  8. 复制错误:安装程序无法复制文件 Atapi.sys
  9. Win11 ARM64深度解析
  10. c语言total用法,C语言 这个表达式怎么理解 新手请大神详述total += isalnum(ch[i])!=0;...
  11. vue3 loadsh 防抖功能
  12. 【导数术】4.三次函数
  13. 高清图片免费素材网站分享
  14. 从0开始搭建flask web 程序(1)
  15. input上传图片之获取图片名字
  16. Java基础 DAY18
  17. 洛谷 P1120 小木棍 题解
  18. 具备统一门户功能的内网即时通讯软件才是发展趋势
  19. 2022最新搭建第三方素材解析网站源码参考开发,附带小例子。
  20. LCD RGB 控制技术 时钟篇

热门文章

  1. maven 编译mybatis项目时xml文件无法编译到target目录下的解决方法
  2. 一个资深投行女销售和低调IT创业男的故事
  3. Java之基础(1) - 编程中“为了性能”尽量要做到的一些地方
  4. 关于Flutter初始化流程,我必须告诉你的是...
  5. 【回文自动机】bzoj3676 [Apio2014]回文串
  6. js---25桥模式
  7. saltstack的基础入门文档
  8. 解决Myeclipse下Debug出现Source not found以及sql server中导入数据报错
  9. SHA256CryptoServiceProvider vs SHA256Managed
  10. JavaScript 异常处理