程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

3. 无重复字符的最长子串 双指针

发布于2020-03-14 19:58     阅读(1551)     评论(0)     点赞(25)     收藏(0)


这种找最长字符串的、有顺序要求的可以考虑双指针,假设当前找到的符合要求的长度为length,后面就只需要找比length长的即可,即找后面符合要求的长度从length长度开始,只需将left、right指针整体向右移一位

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
     请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

解题思路

双指针

class Solution(object):
    def lengthOfLongestSubstring(self, s):
        """
        :type s: str
        :rtype: int
        """
        # 双指针
        max_len = len(set(s))
        left, right = 0, 0 
        ret_len = 0 
        for i in range(len(s)):
            if ret_len == max_len:
                break 
            # 利用集合的互异性判断是否有相同元素
            if len(s[left:right + 1]) == len(set(s[left:right + 1])):
                ret_len = len(s[left:right + 1])
                right += 1 
            else:
                left += 1 
                right += 1

        return ret_len

滑动窗口法

class Solution:
    def lengthOfLongestSubstring(self, s):
        # 滑动窗口法 
        start = 0 
        visited = set()
        cur_len = 0 
        for i in range(len(s)):
            # 如果当前序列中没有s[i]说明可以继续增加
            if s[i] not in visited:
                visited.add(s[i])               
            else:
                # 如果当前序列中有s[i],则从索引为start开始移除,直到没有和s[i]相同的
                while s[i] in visited:
                    visited.remove(s[start])
                    start += 1
                # 然后再将s[i]添加进集合
                visited.add(s[i])

            cur_len = max(cur_len, i - start + 1)
        return cur_len

原文链接:https://blog.csdn.net/baidu_23988783/article/details/104834845



所属网站分类: 技术文章 > 博客

作者:老铁哪来的

链接:https://www.pythonheidong.com/blog/article/259700/388f847dbfafba572485/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

25 0
收藏该文
已收藏

评论内容:(最多支持255个字符)