标签:
问题描述 :
现在请你帮忙判断:他们能不能通过魔法转换使两个人的串变成一样呢?
输入:
输出:
样例输入:
2
abba
addba
1
d b
a
dd
0
样例输出:
Case #1: happy Case #2: unhappy
解题思路:
(1)、因为这是一道关于字符串的问题,当我们敲换行键的时候,我们要用一个getchar()来接收这个换行键。
(2)、我们用一个数组来记录可以转换的字符,打印出一张转换表
(3)、我们把s2转成和s1相同的字符串有两种方法,从s2删除或按照转换表将s2进行转换
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 char s1[1005],s2[1005]; 6 int main() 7 { 8 int T; 9 cin>>T; 10 int len1,len2; 11 for(int cas=1;cas<=T;cas++) 12 { 13 getchar(); 14 gets(s2); 15 len1=strlen(s1); 16 len2=strlen(s2); 17 int n,i,j; 18 int change[30][30]={0}; 19 cin>>n; 20 for(i=0;i<n;i++) 21 { 22 getchar(); 23 char a,b; 24 scanf("%c %c",&a,&b); 25 change[a-‘a‘][b-‘a‘]=1;//打下一个转换表 26 27 } 28 int flag=0;//标记 29 j=0;// 控制s2的下标 30 for(i=0;i<len1;i++) 31 { 32 if(j==len2)//s2全部遍历完毕 33 break; 34 if(s1[i]==s2[j]) 35 { 36 j++; 37 continue; 38 } 39 while(s1[i]!=s2[j]) 40 { 41 if(j==len2)//s2遍历到最后一个,却没有使s2转换成和s1一样 42 { 43 flag=1;//标记 44 break; 45 } 46 if(change[s2[j]-‘a‘][s1[i]-‘a‘]==1)//查看转换表 47 { 48 j++; 49 break; 50 } 51 else 52 j++;//直接删除 53 } 54 } 55 cout<<"Case #"<<cas<<": "; 56 if(flag) 57 cout<<"unhappy"<<endl; 58 else 59 cout<<"happy"<<endl; 60 } 61 return 0; 62 }
标签:
原文地址:http://www.cnblogs.com/xinxiangqing/p/5014038.html