CF985F Isomorphic Strings
题目描述
给定一个长度为 $n$ 的字符串 $s$,该字符串仅包含小写英文字母。
对于两个字符串 $s$ 和 $t$,设 $S$ 是 $s$ 中不同字符的集合,$T$ 是 $t$ 中不同字符的集合。如果 $s$ 和 $t$ 的长度相等,且存在 $S$ 到 $T$ 的一一映射(双射)$f$,满足 $f(s_{i})=t_{i}$,则称 $s$ 和 $t$ 是同构的。形式化地说:
1. 对于任意下标 $i$,有 $f(s_{i})=t_{i}$;
2. 对于 $S$ 中的任意字符 $x$,存在唯一的 $T$ 中字符 $y$,使得 $f(x)=y$;
3. 对于 $T$ 中的任意字符 $y$,存在唯一的 $S$ 中字符 $x$,使得 $f(x)=y$。
例如,字符串 "aababc" 和 "bbcbcz" 是同构的。"aaaww" 和 "wwwaa" 也是同构的。以下字符串对不是同构的:"aab" 和 "bbb","test" 和 "best"。
你需要处理 $m$ 个询问,每个询问由三个整数 $x,y,len$ 组成($1\leq x,y\leq n-len+1$)。对于每个询问,判断两个子串 $s[x\ldots x+len-1]$ 和 $s[y\ldots y+len-1]$ 是否同构。
输入格式
第一行包含两个用空格分隔的整数 $n$ 和 $m$($1\leq n\leq 2\cdot 10^{5}$,$1\leq m\leq 2\cdot 10^{5}$),分别表示字符串 $s$ 的长度和询问的数量。
第二行包含一个长度为 $n$ 的字符串 $s$,仅包含小写英文字母。
接下来的 $m$ 行,每行包含三个整数 $x_{i}$、$y_{i}$ 和 $len_{i}$($1\leq x_{i},y_{i}\leq n$,$1\leq len_{i}\leq n-\max(x_{i},y_{i})+1$),表示一次询问,询问 $s[x_{i}\ldots x_{i}+len_{i}-1]$ 和 $s[y_{i}\ldots y_{i}+len_{i}-1]$ 是否同构。
输出格式
对于每个询问,输出一行。如果两个子串同构,输出 "YES";否则输出 "NO"。
说明/提示
样例中的询问如下:
1. 子串 "a" 和 "a" 是同构的:$f(a)=a$;
2. 子串 "ab" 和 "ca" 是同构的:$f(a)=c$,$f(b)=a$;
3. 子串 "bac" 和 "aba" 不是同构的,因为 $f(b)$ 和 $f(c)$ 必须同时等于 $a$;
4. 子串 "bac" 和 "cab" 是同构的:$f(b)=c$,$f(a)=a$,$f(c)=b$。
由 ChatGPT 4.1 翻译