LeetCode刷题第3题(C#)

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串的长度。

法一:

这道题用到的其实是滑动窗口。

滑动窗口算法是在特定窗口大小的数组或字符串上执行要求的操作。它可以将一部分问题中的嵌套循环转变为一个单循环,以此减少时间复杂度。

以字符串为例,滑动窗口的思路为:

1. 使用双指针中的左右指针技巧,初始化left = right = 0,把[left,right]称为一个窗口

2. 先不断扩大右侧的right指针,扩大窗口范围,直到窗口中所有的字符串都符合要求

        比如要在【A,A,D,D,C,B,A,D,C】中找出现ABC的窗口

        在第2步找到【AADDCB】

        此时左侧还没动,所以从第一个A开始

3. 停止增加右侧指针,开始增加左侧left,直到窗口中不包含ABC

        很遗憾,只能移一位,保持窗口在【ADDCB】

4. 重复第2步和第3步,直到right到达给定字符串的最右侧

==》【DDCB】==》【DDCBA】==》【CBA】==》【BA】==》【BADC】==》【ADC】

//样例输入[A,A,C,B,A],找ABC
public int GetAns(string s)
{
    int left = 0;
    int right = 0;
    int max = 0;
    int i,j;
    int length = s.Length;
    bool getSame = false;
   
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值