leetcode #3 无重复字符的最长子串

本文介绍了如何通过滑动窗口算法解决LeetCode上的无重复字符的最长子串问题,提供了一个C++代码实现,并解释了算法思路和时间复杂度。

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

原文地址 沐印 小站https://c.undf.top: "leetcode #3 无重复字符的最长子串" date: 2023-06-08 08:06:00 tags: - 😄leetcode abbrlink: categories: thumbnail: https:// 图片缺失请访问源站 https://c.undf.top/utools/%E6%8C%A3%E9%92%B1%E7%9A%84%E8%BF%9B%E5%BA%A6%E6%9D%A1%EF%BC%8C%E5%BE%97%E6%98%AF%E8%80%81%E6%9D%BF%E7%BB%99%E6%88%91%E7%9A%84%E6%AC%A0%E6%9D%A1%E3%80%82%20%E5%89%AF%E6%9C%AC%20%E5%89%AF%E6%9C%AC_h43yvu37v7fjxdw3.gif imgonly: true

3 无重复字符的最长子串

代码

int lengthOfLongestSubstring(string s)
{
    string temp;
    int ftemp = 0;
    for(int i = s.length(); i > 0; i--)
    {
        if (temp.find(s[s.length() - i]) > temp.length()) // 无重复  temp.find(s[s.length() - i]) == -1 但会很大 所以
        {
            // 无重复
            temp.push_back(s[s.length() - i]);
            ftemp = temp.length() > ftemp ? temp.length() : ftemp;
        }
        else
        {
            // 有重复
            i += (temp.length() - temp.find(s[s.length() - i]) - 1);
            temp.clear();
            temp.push_back(s[s.length() - i]);
            ftemp = temp.length() > ftemp ? temp.length() : ftemp;
        }
    }
    return ftemp;
}

使用到的函数

string::find(char c) // 返回c在string中的位置 无则返回string::npos
string::length() // 返回string的长度
string::push_back(char c) // 在string的末尾添加c
string::clear() // 清空string

思路

刚开始看错了题

做完去看评论 发现这个题的思路是滑动窗口

这道题主要用到思路是:滑动窗口

什么是滑动窗口?

其实就是一个队列,比如例题中的 abcabcbb,进入这个队列(窗口)为 abc 满足题目要求,当再进入 a,队列变成了 abca,这时候不满足要求。所以,我们要移动这个队列!

如何移动?

我们只要把队列的左边的元素移出就行了,直到满足题目要求!

一直维持这样的队列,找出队列出现最长的长度时候,求出解!

时间复杂度:O(n)O(n)O(n)

作者:powcai 链接:https://leetcode.cn/problems/longest-substring-without-repeating-characters/solutions/3982/hua-dong-chuang-kou-by-powcai/

来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

总结

c++ 很多特性还不会用 要继续学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weiekko

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值