求字符串的最长无重复字符子串长度
题目:
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
这道题通过滑动窗口来解决,通过一个vector/数组 定义256大小,下标表示所有字符,用一个left表示窗口的左边界,i向右滑动,strmax表示最大窗口大小,也是不重复字符的最长字串。通过vector中的字符下标所对应的值和left比较判断窗口中是否出现重复字符,如果出现,left重新更新。但是注意比如 abca(left)cdefa 比如当i走到第三个a时 left的值就会是第二个a的下标数,这样窗口大小就是i-left,刚好不包括left所指的a字符。
//其他头文件自写
#include <vector>
#include<algorithm> int MaxStr(string str) { vector<int> help(256,-1); int strmax = 0; int left = -1; int len = str.length(); for(int i=0;i<len;i++) { left = max(left, help[str[i]]); help[str.at(i)] = i; strmax = max(strmax, i - left); } return strmax; }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步