public class jingdongdp {
public void dp(String str,int n){
//
//String[] nums = str;//前i个字符的0:1比例
Map<String,Integer> map = new HashMap<>();//key:gcd之后的比例,比例值为key的前缀数目
int[] res = new int[n];//最后的结果,前i个字符的分割的字符串个数
int zero=0,one=0;//保存当前的0,1数目
for(int i=0;i<n;i++){
if(str.charAt(i)=='0'){
zero++;
}else{
one++;
}
int rate=1;
if(zero !=0 && one !=0){//计算
rate = gcd(zero,one);
}
String tmp=new String(String.valueOf(zero/rate)+":"+String.valueOf(one/rate));
map.put(tmp,map.getOrDefault(tmp,0)+1);
res[i]=map.get(tmp);
}
for(int i=0;i<n;i++){
System.out.println(res[i]);
}
}
int gcd(int a,int b){
return b>0?gcd(b,a%b):a;
}
public static void main(String[] args) {
jingdongdp jj = new jingdongdp();
int tmp = jj.gcd(6,4);
System.out.println(tmp);
jj.dp("0101",4);
}
}