LeetCode 3 无重复的最长子串

博客介绍了如何使用滑动窗口算法来解决寻找字符串中无重复字符的最长子串问题。通过示例展示了算法的实现过程,包括两个不同的方法:一种是直接利用滑动窗口思路,另一种是从最长子串到最短子串遍历。文章突出了滑动窗口在字符串处理中的应用和效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

串中任意个连续的字符组成的子序列称为该串的子串
# # 示例 1:
# #
# # 输入: s = "abcabcbb"
# # 输出: 3
# # 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
# # 示例 2:
# #
# # 输入: s = "bbbbb"
# # 输出: 1
# # 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
# # 示例 3:
# #
# # 输入: s = "pwwkew"
# # 输出: 3
# # 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
# #      请注意,你的答案必须是 子串 的长度,"pwke"是一个子序列,不是子串。

# #利用滑动窗口去解决无重复字符的最长字串
def lengthOfLongestSubstring(s) :
    if not s:
        return 0
    left = 0
    lookup = set()
    n = len(s)
    max_len = 0
    cur_len = 0
    for i in range(n):
        cur_len += 1
        while s[i] in lookup:
            lookup.remove(s[left])
            left += 1
            cur_len -= 1
        if cur_len > max_len: max_len = cur_len
        lookup.add(s[i])
    #print (max_len)
    return max_len
# s="xyzxyz"
# lengthOfLongestSubstring(s)


#从最长字符串到最短依次遍历
def lengthOfLongestSubstring(s) :
        x=set(list(s))#将字符串转化为不重复的单个字符,现在x是一个列表
        s_length=len(s)#字符串s的长度
        if s_length==0:
            return 0
        x_length=len(x)#列表x的长度
        y=range(-x_length,0)
        absList=list(map(abs,y))##取绝对值并将数字从大到小排列,得到不重复子串的长度情况
        for i in absList:#测试无重复最长子串的长度
            for j in range(0,s_length-i+1):
                #list(s[j:j+i])得到所有的子串。
                if len(set(list(s[j:j+i])))==i:#判断子串中不重复元素是否最长
                    print(i)
                    return i
s="xyzxyz"
lengthOfLongestSubstring(s)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值