leetcode算法题:滑动窗口实现寻找最大无重复的子串

4 篇文章 0 订阅

       leetcode算法题:滑动窗口实现寻找最大无重复的子串

文章开始把我喜欢的这句话送个大家:这个世界上还有什么比自己写的代码运行在一亿人的电脑上更酷的事情吗,如果有那就是让这个数字再扩大十倍

import static java.lang.Math.max;

public class lengthOfLongestSubstring {
    /***
     * 寻找最大无重复的子串,大小写敏感
     */
    static int  LongestSubstring(char[] s,int index){
        int []freq = new int [256];
        int l=0,r=-1;//[l,.....r]为滑动窗口;
        int res = 0;//返回值表示最长子串;
        //int temp = 0;//res的上一个值
//不需要,数组初始值就是0了
//        for(int i= 0;i<freq.length;i++){
//            freq[i]=0;
//        }

        while (l < s.length){//滑动窗口的终止条件!!!!!!
            if(r+1 < s.length && freq[s[r+1]] == 0){
                /***
                 * 滑动窗口一定注意判断条件必须有r+1<s.length()不然最后会越界
                 * freq[]表示256个char是否重复了
                 */
                r++;
                freq[s[r]]++;
            }
            else {
                /***
                 * 一定要注意这里的顺序,是先s[l]再l++,不然是不对的
                 * 会越界
                 */
                freq[s[l]]--;
                l++;
            }
//            temp = res;
//            index = l;
            res = max(res,r-l+1);
//            if(res != temp){
//                index=l;
//            }
        }
        System.out.println(index);
        return res;
    }

    public static void main(String[] args) {
        char[] s = {'a', ' ', '!', 'b', 'a', 'c', 'b'};
        int index = 1;//表示最长子串开始位子的索引,从0开始
        int length = LongestSubstring(s, index);//length为最长子串的长度;
        System.out.println("length =" + length);
        System.out.println("start at" + index);
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值