public List<Integer> findSubstring2(String S, String[] L) {
        List<Integer> res = new ArrayList<Integer>();
        if(S == null || S.length() == 0 || L == null || L.length == 0) return res;
        int L2 = S.length();
        int l = L[0].length();
        int L1 = L.length * l;
        for(int i = 0; i <= L2 - L1; ++i) {
            String sub = S.substring(i, i + L1);
            List<String> T = new ArrayList<String>(L.length);
            for(int j = 0; j < L.length; ++j){
                String meta = sub.substring(j * l, (j + 1) * l);
                T.add(meta);
            }
            for (String s : L){
                if (!T.remove(s)) break;
            }
            if (T.isEmpty()) res.add(i);
        }
        return res;
    }