/**
* 具体问题我也记不清楚了我就说说我自己对题目的理解
* 其实就是保证在这个区间内有这个快递员的所以的包裹其他区间没有他的包裹的最小区间这个区间内的所有快递员都满足这个情况
* 我的解法比较暴力一点
* 用map将所有快递员在整体上出现的次数统计出来。
* 然后遍历字符串,拥有一个新的map来统计区间前面出现的快递员剩下的包裹,
* 当map中的元素的值都变成0表示这个快递员已经没有包裹了到此一个区间完了然后进行重置。以此进行下去。
*/
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String string = scan.nextLine();
Map<Character,Integer> map=new HashMap<>();
for (int i=0;i<string.length();i++){
char c=string.charAt(i);
if (map.containsKey(c)){
int m=map.get(c);
map.put(c,m+1);
}else {
map.put(c,1);
}
}
Map<Character,Integer> map1=new HashMap<>();
int [] nums=new int[map.size()];
int cnt=0;
int right=0;
for (int i=0;i<string.length();i++){
char c=string.charAt(i);
if (!map1.containsKey(c)){
map1.put(c,map.get(c)-1);
}else {
map1.put(c,map1.get(c)-1);
}
cnt++;
if (help(map1)){
nums[right]=cnt;
cnt=0;
right++;
map1=new HashMap<>();
}
}
for (int i=0;i<right;++i){
if (i!=0){
System.out.print(" ");
}
System.out.print(nums[i]);
}
System.out.println();
}
/**
* 判断map中值为空
* @param map1
* */
private static boolean help(Map<Character, Integer> map1) {
for (Map.Entry<Character, Integer> s:map1.entrySet()) {
if (s.getValue()!=0){
return false;
}
}
return true;
}
}
第二题没有AC就不写了。
#笔试题目##美团#