1. 问题描述:
    给定一个数组arr,返回arr的最长无的重复子串的长度(无重复指的是所有数字都不相同)。
    例如: 输入:[2,3,4,5] 输出:4 输入:[2,2,3,4,3] 输出:3
public int maxLength (int[] arr) {
        // write code here
        Map<Integer,Integer> map = new LinkedHashMap<>();
        if(arr==null || arr.length==0) return 0;
        if(arr.length==1)return 1;
        int left = 0,right = 0,max=0;
        for(int tmp = 0;right<arr.length;right++){
            int cur = arr[right];
            if(map.containsKey(cur) && map.get(cur) >= left){
                tmp = right-left;
                left = map.get(cur)+1;
            }
            if(max==0 && tmp == 0 && (right+1)== arr.length){
                // 解决数组从第一个到最后一个都是不一样的数据长度问题
                max = right-left+1;
            }
            map.put(cur,right);
            max = tmp>max?tmp:max;
        }
        return max;
 }  
  1. 题目描述:
    输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba
import java.util.*;
public class Solution {
    ArrayList<String> result = new ArrayList<>();
    public ArrayList<String> Permutation(String str) {
        if(str == null || str.length()==0) return result;
       char[] ch = str.toCharArray();
        Arrays.sort(ch);
        int[] flag = new int[ch.length];
        StringBuilder newStr = new StringBuilder();
        getStr(ch,newStr,flag);
        return result;
    }
    
    public void getStr(char[] ch,StringBuilder newStr,int[] flag){
        if(newStr.length()==ch.length){
            result.add(newStr.toString());
            return;
        }
        for(int i = 0;i<ch.length;i++){
            if(flag[i]==1) continue;
            if(i != 0 && ch[i] == ch[i-1] && flag[i-1] != 1) continue;
            newStr.append(ch[i]);
            flag[i] = 1;
            getStr(ch,newStr,flag);
            newStr.deleteCharAt(newStr.length()-1);
            flag[i]  = 0;
        }
        return ;
    }
}  
  1. 题目描述
    给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历) 例如: 给定的二叉树是{3,9,20,#,#,15,7},

该二叉树层序遍历的结果是

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 * }
 */

public class Solution {
    /**
     * 
     * @param root TreeNode类 
     * @return int整型ArrayList<ArrayList<>>
     */
    public ArrayList<ArrayList<Integer>> levelOrder (TreeNode root) {
        // write code here
        ArrayList<ArrayList<Integer>> result  = new ArrayList<>();
        if(root!=null){
            Queue<TreeNode> que = new LinkedList<>();
            que.offer(root);
            while(!que.isEmpty()){
                ArrayList<Integer> list = new ArrayList<>();
                Queue<TreeNode> que2 = new LinkedList<>();
                while(!que.isEmpty()){
                    TreeNode tmp = que.poll();
                    list.add(tmp.val);
                    if(tmp.left!=null){
                        que2.offer(tmp.left);
                    }      
                    if(tmp.right!=null){
                         que2.offer(tmp.right);
                    }
                } 
                result.add(list);   
                que = que2;
            }
        }
        return result;
    }
    
   
}  
  1. 题目描述 一个重复字符串是由两个相同的字符串首尾拼接而成,例如abcabc便是长度为6的一个重复字符串,而abcba则不存在重复字符串。 给定一个字符串,请编写一个函数,返回其最长的重复字符子串。 若不存在任何重复字符子串,则返回0。
public int solve (String a) {
        // write code here
       int mid = a.length()/2;
        for(;mid>0;mid--){
            loop:for(int i = 0;i+mid*2<=a.length();i++){
                for(int j = i;j<i+mid;j++){
                    if(a.charAt(j)!=a.charAt(j+mid)){
                        continue loop;
                    }
                }
                return mid*2;
                
            }
        }
        return 0;
    
    }