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));
			}
		}
		
	}

posted @ 2018-11-04 22:31  第三大费尔  阅读(176)  评论(0编辑  收藏  举报