题目
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。
示例 1:
输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/zui-chang-bu-han-zhong-fu-zi-fu-de-zi-zi-fu-chuan-lcof 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题
方法一:滑动窗口+哈希表记录字符索引
注意此题中,包含的字符串,不仅仅只有’a’~‘z’,还会包含其他字符。
因此将哈希表(数组表示,用于记录最近一次字符出现的索引),设置为128的大小,因为ASCII的范围就是0~127
class Solution { public: int lengthOfLongestSubstring(string s) { vector<int> m(128, -1); int res=0,left=-1; for(int i=0;i<s.size();++i) { left=max(left,m[s[i]]);//记录滑动窗口左边界 m[s[i]]=i;//更新索引 res=max(res,i-left);//更新结果 } return res; } };