這個題用前綴和,開兩個數組,一個存前n個字符數據的c1的數字個數,另一個前n個字符c2的數字個數,然后遍歷一次加起來,有一個測試點沒過去,把那個存最后數的換成long,應該是這題數據范圍給的不對,按說不會超。
package com.js.datastructure.recursion.藍橋;import java.util.Scanner;public class 子串簡寫_前綴和 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int k = scanner.nextInt();String s = scanner.next();char c1 = scanner.next().charAt(0);char c2 = scanner.next().charAt(0);int l = s.length();int[] num1 = new int[l+1];int[] num2 = new int[l+1];for (int i = 0; i < l; i++) {if(s.charAt(i) == c1){num1[i+1] = num1[i] + 1;}else {num1[i+1] = num1[i];}if(s.charAt(i) == c2){num2[i+1] = num2[i] + 1;}else{num2[i+1] = num2[i];}}long num = 0;for (int j = 1; j < l-k+2; j++) {if(num1[j] > num1[j-1]){num = num + num2[l] - num2[j+k-2];}}System.out.println(num);}
}