求最大不重复子串

import java.util.HashMap;
import java.util.Scanner;

public class Sort {
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        String str = in.next();
        System.out.println(LongestString(str));

    }
    public static String LongestString(String s) throws NullPointerException{
        int start=0;//当前子串开始位置
        int len=0;//当前子串长度
        int mstart=0;//最大子串开始位置
        int mlen=0;//最大子串长度
        HashMap<Character,Integer> map=new HashMap<Character,Integer>();
        for(int i=0;i<s.length();i++){
            if(!map.containsKey(s.charAt(i))) {//如果没出现该字符
                map.put(s.charAt(i), 1);//标志出现
                len++;
            }
            else{//如果出现过,说明找到一个子串
                if(len>mlen) {
                    mstart = start;//更新最大子串
                    mlen=len;
                }
                while(s.charAt(start)!=s.charAt(i)){//查找新的开始
                    map.remove(s.charAt(start));//去掉非新子串元素
                    start++;
                    len--;

                }
                start++;
            }
        }
        if(len>mlen) {//循环结束,判断最后子串
            mstart = start;
            mlen=len;
        }

        return s.substring(mstart,mstart+mlen);
    }
}

 

posted @ 2020-08-17 23:55  花儿在成长  阅读(196)  评论(0编辑  收藏  举报