B.重塑品牌
一家小而自豪的公司的名称是 n小写英文字母。该公司已决定尝试重塑品牌–这是一种积极的营销策略,其中包括一套改变品牌的措施(无论是针对公司及其生产的商品),还是改变其组成部分:名称、标志、口号。他们决定以名字开头。
为此目的,该公司已连续雇用 m设计师们。一旦一家公司雇用了 i-TH设计师,他立即为创建一个新的公司名称做出了如下贡献:他采用了该名称的最新版本,并替换了所有的字母 x i通过 y i,还有所有的信件 y i通过 x i。这将导致新版本的出现。其中一些字母可能不会出现在字符串中。也可能发生 x i重合 y i。上一位设计师工作后收到的名称的版本成为公司的新名称。
阿卡迪经理最近在这家公司找到了一份工作,但他已经沉浸在团队精神中,并且非常担心品牌重塑的成功。当然,他迫不及待地想知道公司的新名称是什么。
满足阿卡迪的好奇心,告诉他这个名字的最终版本。
输入
输入的第一行包含两个整数。 n和 m (1≤n, m≤200 000)-初始名称的长度和雇用的设计人员数量。
第二行包括 n小写英文字母,代表公司原名。
下一个 m行包含设计器操作的描述: i-其中包含两个空格分隔的小写英文字母。 x i和 y i.
输出量
打印公司的新名称。
实例
输入
6 1
police
p m
输出量
molice
输入
11 6
abacabadaba
a b
b c
a d
e g
f a
b b
输出量
cdcbcdcfcdc
#include<iostream>
using namespace std;
int d[1000];
int main(){
long long n,m;
cin>>n>>m;
string s;
cin>>s;
char a,b;
while(m--){//灵活使用ascall码可以简化时间复杂度
cin>>a>>b;
for(int i=97;i<=122;i++){ //对于专门针对字母的题目注意灵活使用ASCALL码
int f=0;
if(d[i]==(int)a)d[i]=(int)b,f=1;
if(d[i]==(int)b&&f==0)d[i]=(int)a;
if(i==(int)a&&d[i]==0){
d[i]=(int)b;
}
if(i==(int)b&&d[i]==0){
d[i]=(int)a;
}
}
}
for(int i=0;i<s.length();i++){
if(d[(int)s[i]])s[i]=(char)d[(int)s[i]];
}
cout<<s;
return 0;
}