LeetCode-3:Longest Substring Without Repeating Characters

本文详细解析了寻找字符串中最长无重复字符子串的算法。通过滑动窗口和哈希集合,动态更新并记录最长子串长度,提供LeetCode题目解答思路。

描述:给一个字符串s,找到它的最长子串(无任何字符重复)substring的长度。

举例:

    Input: "abcabcbb"

    Output: 3

    Explanation: The answer is "abc", which the length is 3.

思路:

    我的做法是从左至右扫描,设repeat[c],记录字符c上一次在字符串s中出现的位置。假设现在正在扫描s[j]字符,而之前已经记录s[i,j-1]都未出现任何重复字符。假设检测到s[j]上一次出现的位置repeat[j]在区间[i,j-1]内,那么可以截取子串s[i,j-1]并与当前smax做优选。接着我们可以从repeat[j]开始,更新区间为s[repeat[j]+1,j]并继续向后扫描处理。

    官方的思路其实跟我的一致,不过叙述上有所差别。它提出了滑动窗口SliddingWindow的概念,并且使用HashSet存储窗口P[i,j)内的所有未重复字符。当发现s[j]在HashSet中重复时就要动态更新窗口下限i,尽可能大地向右滑动。详见:https://leetcode.com/problems/longest-substring-without-repeating-characters/solution/

 

 

转载于:https://www.cnblogs.com/Jackie-Snow/p/9531958.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值