剑指 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;
    }
};
相关文章
|
7月前
|
存储 算法 Java
LeetCode 无重复字符的最长子串 打败100%的人
LeetCode 无重复字符的最长子串 打败100%的人
99 0
|
7月前
|
算法 测试技术 C#
【线段树】2213. 由单个字符重复的最长子字符串
【线段树】2213. 由单个字符重复的最长子字符串
【LeetCode 训练营 3,5】无重复字符的最长子串+最长回文子串
【LeetCode 训练营 3,5】无重复字符的最长子串+最长回文子串
94 1
|
7月前
剑指 Offer 50:第一个只出现一次的字符
剑指 Offer 50:第一个只出现一次的字符
39 0
|
7月前
剑指 Offer 03:数组中重复的数字
剑指 Offer 03:数组中重复的数字
28 0
|
7月前
|
存储
leetcode-1763:最长的美好子字符串
leetcode-1763:最长的美好子字符串
77 0
剑指offer 49. 最长不含重复字符的子字符串
剑指offer 49. 最长不含重复字符的子字符串
74 0
剑指 Offer 48. 最长不含重复字符的子字符串
剑指 Offer 48. 最长不含重复字符的子字符串
56 0
|
容器
图解LeetCode——剑指 Offer 48. 最长不含重复字符的子字符串
图解LeetCode——剑指 Offer 48. 最长不含重复字符的子字符串
107 0

热门文章

最新文章