题解 AT4233 【[ABC110C] String Transformation】

· · 题解

ChungZH's blog · ChungZH's portfolio

您会得到由小写英文字母组成的字符串 ST

您可以在 S 上多次执行以下操作:

操作:选择两个不同的小写英文字母 c_1c_2,然后将每次出现的 c_1 替换为 c_2,并将每次出现的 c_2 替换为 c_1

通过执行零次或更多次操作,确定 ST 是否可以相等。

用数组 a 记录 S 中每个字符出现的次数,数组 b 记录 T 中每个字符出现的次数。排序一下,判断 a_ib_i 是否相等。不相等证明无法替换,输出 No。否则输出 Yes

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;
}