763. 划分字母区间

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        char[] charArr = str.toCharArray();
        int[] c = new int[charArr.length];
        Map<Character, Integer> map = new HashMap();
        for(int i=charArr.length-1; i>=0; i--) {
            if(map.get(charArr[i]) == null) {
                map.put(charArr[i], i);
                c[i] = i;
            }else {
                c[i] = map.get(charArr[i]);
            }
        }
        List list = new ArrayList<Integer>();
        // c[] 构建完毕了
        int i = 0; 
        while(i <= charArr.length-1) {
            int k = c[i];
            int newMax = k;
            for(int j=i; j<k; j++) {
                if(c[j] > k) {
                    newMax = c[j];
                }
            }
            if(newMax == k) {
                list.add(k);
                i = k + 1; 
            }else {
                i = newMax;
            }
        }
        
        
        for(int g=0; g < list.size(); g++) {
            if(g == 0) {
                System.out.println((int)list.get(0)+1);
            }
            else {
                System.out.println((int)list.get(g)-(int)list.get(g-1));
            }
        }
        
    }

猜你喜欢

转载自www.cnblogs.com/disandafeier/p/9906305.html