1. 程式人生 > >牛客網小白月賽6D 字串絲帶

牛客網小白月賽6D 字串絲帶

時間限制:C/C++ 1秒,其他語言2秒 空間限制:C/C++ 65536K,其他語言131072K 64bit IO Format: %lld 題目描述 WHZ送給了HtBest一個“字串絲帶”,這條絲帶由n個小寫字母按照一定的順序排列組成,HtBest收到新禮物後有許多問題,類似“第i個位置的字母在前i個位置中出現了幾次?”,HtBest很希望知道答案,於是求助你幫忙解答。

輸入描述: 第一行有2個正整數n,m,分別表示絲帶長度和問題個數。 第二行,有n個小寫字母,第i個表示絲帶第i位的小寫字母。 接下來有m行,每行一個正整數 ,表示HtBest的一個問題。 輸出描述: 共m行,對於每個問題,給出答案。

示例1 輸入

3 3
abc
1
2
3

輸出

1
1
1

示例2 輸入

4 4
abba
1
2
3
4

輸出

1
1
2
2

示例3 輸入

7 7
yyuahhy
7
6
5
4
3
2
1

輸出

3
2
1
1
1
2
1

備註: 對於100%的測試資料: 1 ≤ n ≤ 1000000 資料量較大,注意使用更快的輸入輸出方式。

該題可以用桶儲存每個字元在當前的出現次數,從頭開始,出現的字母的桶加1,然後用這個數打表

程式碼

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
import java.util.stream.Stream;
 
public class Main {
 
    static StreamTokenizer sc = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
    public static void main(String[] args) throws IOException {
         
        int n = getInt();
        int m = getInt();
        int[] z = new int[233];
        String sss = getS();
        int out[] = new int[sss.length() + 1];
        for (int i = 0; i < sss.length(); i++) {
            out[i] = ++z[sss.charAt(i)];
        }
        StringBuilder ss = new StringBuilder();
        while (--m > 0) {
            ss.append(out[getInt()-1]+"\n");
        }
        ss.append(out[getInt()-1]);
        System.out.println(ss);
    }
    static int getInt() throws IOException{
        sc.nextToken();
        return (int)sc.nval;
    }
    static String getS() throws IOException{
        sc.nextToken();
        return sc.sval;
    }
}