LeetCode第三题--无重复字符的最长子串

这篇博客介绍了如何使用C++的unordered_set和Python的set来寻找字符串中最长的无重复字符子串。在C++的实现中,通过find()函数检查字符是否已存在于子串中,当遇到重复字符时,删除子串开头的元素并更新子串长度。Python的实现类似,使用remove()方法移除重复元素。两种语言的解决方案都利用了集合的高效查找特性来优化算法。
摘要由CSDN通过智能技术生成

C++

unordered_set无序容器使用方法:
find(key)函数:查找以值为 key 的元素,如果找到,则返回一个指向该元素的正向迭代器;反之,则返回一个指向容器中最后一个元素之后位置的迭代器,即end()

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        if(s.size()<2) return s.size();
        unordered_set<char> substr;
        int maxsize = 0;        //子串的最大长度
        int left = 0;           //子串开头字符对应原字符串的索引
        for(int i = 0;i < s.size();i++) //i+1对应的是第几个字符串
        {
            //子串中已经有这个元素进循环,直到没重复元素为止
            while(substr.find(s[i]) != substr.end())
            {
                substr.erase(s[left]);          //删除子串开头的元素,对应s的第left个字符
                left++;
            }
            maxsize = max(maxsize, i+1-left);    //i+1-left对应进入子串容器中的长度
            substr.insert(s[i]);                 //插在末尾
        }
       return maxsize;

    }
};

Python

set集合详细用法
Python的for循环只能是这么用for 元素 in 数组
如果像C++那样可以写成for i in range(n) 从1到n-1

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        if len(s)<2: return len(s)
        substr = set()
        maxsize, left, i = 0, 0 , 0
        for char in s:
            while char in substr:
                substr.remove(s[left])
                left += 1
            i += 1
            maxsize = max(maxsize, i-left)
            substr.add(char)
        return maxsize
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值