Longest Substring Without Repeating Characters(最长不重复子序列求解)
问题描述:
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(最长不重复子序列求解)相关推荐
- Leetcode 3:Longest Substring Without Repeating Characters(最长不重复子串)
Description Given a string, find the length of the longest substring without repeating characters. 给 ...
- leetcode 3. Longest Substring Without Repeating Characters 最长非重复子串的长度 滑动窗口法
题目链接 根据我们之前介绍的滑动窗口法的解法: 滑动窗口法详解 leetcode 438. Find All Anagrams in a String 滑动窗口法 这题,我们不难解决,使用之前的模板. ...
- LeetCode.3-最长无重复字符子串(Longest Substring Without Repeating Characters)
这是悦乐书的第341次更新,第365篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Medium级别的第2题Longest Substring Without Repeating Cha ...
- leetcode算法—无重复字符的最长子串 Longest Substring Without Repeating Characters
关注微信公众号:CodingTechWork,一起学习进步. 题目 Longest Substring Without Repeating Characters: Given a string, fi ...
- LeetCode:Longest Substring Without Repeating Characters(最长不重复子串)
题目链接 Given a string, find the length of the longest substring without repeating characters. For exam ...
- leetcode(三)—— Longest Substring Without Repeating Characters(最长不重复子串 Python/C++)
Longest Substring Without Repeating Characters | LeetCode OJ 使用 hash 判重问题首先想到的就是 hash(或者使用 map): 思路: ...
- LeetCode:3. Longest Substring Without Repeating Characters
https://leetcode.com/problems/longest-substring-without-repeating-characters/description/ 内容描述: Give ...
- Leet Code OJ 3. Longest Substring Without Repeating Characters
题目 Given a string, find the length of the longest substring without repeating characters. Examples: ...
- LeetCode Longest Substring Without Repeating Characters
题意 Given a string, find the length of the longest substring without repeating characters. For exampl ...
最新文章
- 区块链基础--工作量证明
- 除非换行符在格式字符串中,否则为什么在调用后printf不会刷新?
- 您的安全设置不允许网站使用安装在您的计算机上的ActiveX控件的解决方法
- windows bat脚本中调用Cygwin并执行命令
- Ubuntu虚拟机磁盘扩容+VM虚拟机开机多出1分30秒的解决方案(终极教程)
- 结合实例学习F#(二) --基本数据类型Discriminated Unions
- 机器学习视频课程(超清完整11周)分享给大家!
- 复制错误:安装程序无法复制文件 Atapi.sys
- Win11 ARM64深度解析
- c语言total用法,C语言 这个表达式怎么理解 新手请大神详述total += isalnum(ch[i])!=0;...
- vue3 loadsh 防抖功能
- 【导数术】4.三次函数
- 高清图片免费素材网站分享
- 从0开始搭建flask web 程序(1)
- input上传图片之获取图片名字
- Java基础 DAY18
- 洛谷 P1120 小木棍 题解
- 具备统一门户功能的内网即时通讯软件才是发展趋势
- 2022最新搭建第三方素材解析网站源码参考开发,附带小例子。
- LCD RGB 控制技术 时钟篇
热门文章
- maven 编译mybatis项目时xml文件无法编译到target目录下的解决方法
- 一个资深投行女销售和低调IT创业男的故事
- Java之基础(1) - 编程中“为了性能”尽量要做到的一些地方
- 关于Flutter初始化流程,我必须告诉你的是...
- 【回文自动机】bzoj3676 [Apio2014]回文串
- js---25桥模式
- saltstack的基础入门文档
- 解决Myeclipse下Debug出现Source not found以及sql server中导入数据报错
- SHA256CryptoServiceProvider vs SHA256Managed
- JavaScript 异常处理