找到字符串的最长无重复字符子串

来源:互联网 发布:linux vi命令日志 编辑:程序博客网 时间:2024/05/21 08:48

【题目】
给定str,返回其最长无重复字符子串的长度。
要求时间复杂度为O(N).

【举例】

public static void main(String[] args) {        String s="abcd";        System.out.println(maxNoRepeat(s));//4        s="aabcb";        System.out.println(maxNoRepeat(s));//3    }

【代码】

//找到字符串的最长无重复字符子串    public static int maxNoRepeat(String str){        if(str==null || str.equals("")){            return 0;        }        char[] chas=str.toCharArray();        boolean[] dep=new boolean[256];         String res1="";//存最大的无重复字符串子串        String res0="";//存当前的无重复字符子串        for(int i=0;i<chas.length;i++){            if(dep[chas[i]]!=true){                res0+=chas[i];                dep[chas[i]]=true;            }            else{//遇到出现过的字符,重新存res[0],以当前字符chas[i]开始                res1=res0.length()>res1.length()?res0:res1;                res0=String.valueOf(chas[i]);            }        }        return Math.max(res0.length(), res1.length());    }

【注】
在eclipse的编译调试下,做出来的第二题~
虽然不知道到底是否真的对,但不想看书上的解析啦~
如果有问题或不符合要求,欢迎批评指正~

原创粉丝点击