剑指 Offer 48:最长不含重复字符的子字符串

简介: 剑指 Offer 48:最长不含重复字符的子字符串

题目

题目链接

请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。

示例 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;
    }
};
相关文章
|
4月前
|
存储
【题型总结】寻找满足字符出现奇数次/偶数次的子串个数或者子串最长长度
【题型总结】寻找满足字符出现奇数次/偶数次的子串个数或者子串最长长度
77 0
|
1月前
|
算法
LeetCode第3题无重复字符的最长子串
该文章介绍了 LeetCode 第 3 题无重复字符的最长子串的解法,通过使用 HashSet 记录不重复的子元素,以每个字符开头遍历字符串,遇到重复字符则重新计算,最终找到最长子串,同时提到可以考虑使用 HashMap 降低复杂度。
LeetCode第3题无重复字符的最长子串
|
4月前
|
算法 测试技术 C#
【线段树】2213. 由单个字符重复的最长子字符串
【线段树】2213. 由单个字符重复的最长子字符串
|
4月前
leetcode-3:无重复字符的最长子串
leetcode-3:无重复字符的最长子串
32 0
|
4月前
剑指 Offer 50:第一个只出现一次的字符
剑指 Offer 50:第一个只出现一次的字符
29 0
|
4月前
【每日一题Day226】L1156单字符重复子串的最大长度 | 贪心+滑动窗口
【每日一题Day226】L1156单字符重复子串的最大长度 | 贪心+滑动窗口
44 0
最长不重复子串的有趣解法
最长不重复子串的有趣解法
127 0
剑指offer 49. 最长不含重复字符的子字符串
剑指offer 49. 最长不含重复字符的子字符串
59 0
|
算法 Java Python
leetcode:3.无重复字符的最长子串
首先最容易想到的就是暴力解法,列出所有的子字符串,然后逐个检查是否包含重复的字符就行了,这样思路很简单,但是效率太慢,不推荐。
44 0
【leedcode】0003. 无重复字符最长子串
【leedcode】0003. 无重复字符最长子串
54 0