1. 程式人生 > >資料結構/最長非重複子串

資料結構/最長非重複子串

給定一個字串,找字元中的最大非重複子串
基本方法、動態規劃、動態規劃+Hash

如下方法的時間複雜度O(n)
list中儲存的是最終的輸出結果
public static int lengthOfLongestSubstring(String s) {
    if(s.length()==0){
        return 0;
    }
    int maxLength=1;
    List<Character> list=new ArrayList<Character>();
    list.add(s.charAt(0));
    for(int i=1;i<s.length();i++){
        if(list.contains(s.charAt(i))){
        //輸出結果(list)中包含當前元素i,那麼需要切割取原來list中的當前元素i之後
        //例如此時list為(abcdf),如果遇到當前元素c,那麼更新後的list結果是(cdf)
        //擷取之後,再把當前元素加入到list中
            int index=list.indexOf(s.charAt(i));
            list=list.subList(index+1, list.size());
            list.add(s.charAt(i));
            maxLength=Math.max(maxLength, list.size());
        }else{
            list.add(s.charAt(i));
            maxLength=Math.max(maxLength, list.size());
        }
    }
    System.out.println(list.toString());
    return maxLength;
}
https://www.aliyun.com/jiaocheng/823447.html