题解
- 用一个数组记录第i的字母变成什么,O(n)跑一遍就好了
- 至于,
- abcdefghijklmnopqrstuvwxyz
- zyxwvutsrqponmlkjihgfedcba
- 这种情况,一开始将a变成z,就会有两个z了,就是0
- 我的理解是,每次交换过后就不管了,这样就可以不用管两个z了
- 这叫做充分了解出题人的思想
代码
1 #include <cstdio>
2 #include <iostream>
3 #include <cstring>
4 using namespace std;
5 int t,len1,len2;
6 char dy[255];
7 string s1,s2;
8 bool pd(char x) { return (x>='a'&&x<='z'); }
9 int main()
10 {
11 freopen("copycat.in","r",stdin);
12 freopen("copycat.out","w",stdout);
13 scanf("%d
",&t);
14 for (;t;t--)
15 {
16 getline(cin,s1);getline(cin,s2);
17 memset(dy,0,sizeof(dy));
18 len1=s1.length(),len2=s2.length();
19 if (len1!=len2)
20 {
21 printf("0
");
22 continue;
23 }
24 for (int i=0;i<len1;i++)
25 {
26 if ((!pd(s1[i])&&pd(s2[i]))||(pd(s1[i])&&!pd(s2[i]))||(!pd(s1[i])&&!pd(s2[i])&&s1[i]!=s2[i]))
27 {
28 printf("0
");
29 break;
30 }
31 else
32 if (pd(s1[i])&&pd(s2[i]))
33 {
34 if (dy[s1[i]]&&dy[s1[i]]!=s2[i])
35 {
36 printf("0
");
37 break;
38 }
39 dy[s1[i]]=s2[i];
40 }
41 if (i==len1-1) printf("1
");
42 }
43 }
44 return 0;
45 }