借助HashMap记录之前的数之和
时间复杂度:o(n) 空间复杂度:o(n)
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
String l1=sc.nextLine();
String l2=sc.nextLine();
int k=Integer.parseInt(l1);
char[] nums=l2.toCharArray();
int num=0;
long ans=0; //注意:答案数值可能很大,用long防止溢出
HashMap<Integer,Integer> map=new HashMap<>();
map.put(0,1);
for(int i=0;i<nums.length;i++){
if(nums[i]=='1') num+=1;
if(map.containsKey(num-k)) ans+=map.get(num-k); //累加之前的答案
map.put(num,map.getOrDefault(num,0)+1);
}
System.out.println(ans);
}
}
京公网安备 11010502036488号