题解 AT4233 【[ABC110C] String Transformation】
Zirnc
2020-02-19 19:26:52
[ChungZH's blog](https://chungzh.cn) · [ChungZH's portfolio](https://chungzh.cc)
> 您会得到由小写英文字母组成的字符串 $S$ 和 $T$。
>
> 您可以在 $S$ 上多次执行以下操作:
>
> 操作:选择两个不同的小写英文字母 $c_1$ 和 $c_2$,然后将每次出现的 $c_1$ 替换为 $c_2$,并将每次出现的 $c_2$ 替换为 $c_1$。
>
> 通过执行零次或更多次操作,确定 $S$ 和 $T$ 是否可以相等。
用数组 $a$ 记录 $S$ 中每个字符出现的次数,数组 $b$ 记录 $T$ 中每个字符出现的次数。排序一下,判断 $a_i$ 和 $b_i$ 是否相等。不相等证明无法替换,输出 `No`。否则输出 `Yes`。
```cpp
long long a[30], b[30];
int main() {
string s, t;
cin >> s >> t;
for (int i = 0; i < s.length(); i++) {
a[s[i]-'a']++;
b[t[i]-'a']++;
}
sort(a, a+26);
sort(b, b+26);
for (int i = 0; i < 26; i++) {
if (a[i] != b[i]) {
cout << "No\n";
return 0;
}
}
cout << "Yes\n";
return 0;
}
```