牛客网小白月赛6D 字符串丝带

链接:https://www.nowcoder.com/acm/contest/136/D
来源:牛客网

时间限制: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;
    }
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务