2412. 最短的子串
时间限制:1000 MS 内存限制:256 MB
题目描述
## 题目描述 小火龙最近对包含 $ 26 $ 个小写字母的小写字母字符串挺感兴趣,同样的,这种字符串的子串如果同时也包含 $ 26 $ 个字母,那么小火龙也是感兴趣的。 只不过小火龙现在又想快速的知道,对于给定的字符串,能否快速的知道选择一个下标 $ i $ ,从它开始最短多长,能够包含所有的 $ 26 $ 个小写字母?即最小的下标 $ j(i \le j),s_i,s_{i+1}....s_j $ ,这段字符串包含 $ 26 $ 个小写字母,长度为 $ j - i + 1 $ 。对于这样的询问有 $ q $ 次,请你们帮助他完成这个问题。 ## 输入格式 第一行两个正整数 $ n$ , $q $ 表示字符串长度,和询问次数。 第二行给出一个只包含小写字母的字符串 $ s $ 。 第三行 $ q $ 个正整数,第 $ i $ 个正整数 $ a_i $ ,表示询问的起始下标。 ## 输出格式 输出一行, $ q $ 个数字,对于每一个询问,给出从 $ a_i $ 开始,最短多长能够包含所有的 $ 26 $ 个小写字母,如果从它开始到结尾都没有包含 $ 26 $ 个小写字母,则输出 "`-1`" 。 ## 输入 ```in1 27 3 abcdefghijklmnopqrstuvwxyza 1 2 3 ``` ## 输出 ```out1 26 26 -1 ``` ## 提示 对于第一个询问, $ [1,26] $ 这段字符串是包含 $ 26 $ 个小写字母的,容易知道到 $ s_{26} $ 是最短的。 对于第二个询问, $ [2,27] $ 这段字符串是包含 $ 26 $ 个小写字母的。 对于第三个询问,后面的一段只有 $ 25 $ 个字母,是不可能包含 $ 26 $ 个小写字母的。 所有数据: $ 1 \len\le 10^5,1 \leq\le 10^6,1 \lea_i\len $ | 测试点 | n | q | 特殊限制 | | --- | --- | --- | --- | | 1-10 | 1000 | 1000 | 无 | | 11-20 | 1000 | 1000000 | 无 | | 21-41 | 100000 | 100000 | 无 |