寄居蟹与海葵

寄居蟹与海葵

时间: 1ms        内存:64M

描述:

寄居蟹与海葵是一对合作互助的共栖伙伴。海葵是寄居蟹最称职的门卫。它用有毒的触角去蜇那些敢来靠近它们的所有动物,保护寄居蟹。而寄居蟹则背着行动困难的海葵,四出觅食,有福同享。
但并不是所有寄居蟹和海葵都可以做搭档的。那就要看海葵的身体是不是符合寄居蟹的螺壳。
海葵的身体是有褶皱的,而寄居蟹的螺壳同样凹凸不平,我们可以用一个大写字母组成的字符串来表示它们的高低程度,其中A代表0,B代表1,依次类推。我们称两者相加等于25的就算是吻合,比如A和Z相吻合,B与Y吻合,依次类推。
只要海葵身体的部分序列与寄居蟹外壳的序列相吻合,就称他们可以一起生活。
比如:
1.海葵的褶皱是"ABCDEFG",寄居蟹是"ZYXWVUT"。这样,它们就可以完全吻合了。
2.海葵的褶皱是"AHBICJDKELFMGN",寄居蟹是"ZYXWVUT"。这样,寄居蟹可以和海葵的部分序列"ABCDEFG"相吻合 (注意:部分序列不改变字符原来的先后顺序,比如"ACB"就不是它的部分序列)
3.海葵的褶皱是"ABCD",寄居蟹是"ZYXWVUT"。这样,虽然海葵可以和寄居蟹前面一段完全吻合,但它比寄居蟹要小,不能完全保护寄居蟹的安全,所有它们是不适合的。
4.海葵的褶皱是"HIJKLMNOPQ",寄居蟹是"ZYXWVUT"。这样,它们就可以完全不吻合了。
现给你两段字符串S1、S2,分别代表海葵和寄居蟹的外壳,为了它们以后各都能快乐地生活,请你帮忙计算一下它们是不是吻合的。

输入:

输入包括多组测试数据。
每组测试数据包括两个字符串H、J,分别代表海葵的外壳和寄居蟹的外壳。可以保证它们的长度都小于100000。
输入以0 0结束。

输出:

如果寄居蟹和海葵的外壳能吻合,就输出"Yes",否则输出"No"。

示例输入:

ABCDEFG ZYXWVUT
AHBICJDKELFMGN ZYXWVUT
ABCD ZYXWVUT
HIJKLMNOPQ ZYXWVUT
0 0

示例输出:

Yes
Yes
No
No

提示:

参考答案(内存最优[1040]):

#include<stdio.h>

#include<stdlib.h>
#include<math.h>
int main(){
    char H[100000]={'0'};
	char J[100000]={'0'};
	int k;
	int i,j,l1,l2,s,t;
loop:
    
	//for(i=0;H[i]!='\0';i++)
       scanf("%s",H);
	//for(j=0;J[j]!='\0';j++)
		scanf("%s",J);
	if(H[0]=='0'&&J[0]=='0')
		goto loop1;
	l1=strlen(H);
	l2=strlen(J);
	if(l1<l2)
		printf("No\n");
	else if(l1==l2){
	     for(k=0;k<l1;k++){
			if(H[k]+J[k]-130==25)continue;
			else break;}
         if(k==l1)printf("Yes\n");
		 else printf("No\n");}
	else{ 
		for(s=0,t=0;s<l1&&t<l2;){
			if(J[t]+H[s]-130==25){t++;s++;}
			else
		    s++;}
		if(t==l2)printf("Yes\n");
		else printf("No\n");}
	goto loop;
loop1:	return 0;}

参考答案(时间最优[32]):


#include"stdio.h"
#include"string.h"
int main()
{
    char str1[100010],str2[10010];
    int i,j,s1,s2;
    while(scanf("%s %s",str1,str2),str1[0]!='0'&&str2[1]!='0')
    {
        s1=strlen(str1);
        s2=strlen(str2);
        if(s1<s2)
        {
            printf("No\n");
            continue;
        }
        for(i=0,j=0; i<s1; i++)
        {
            if(str1[i]+str2[j]==155)
                j++;
        }
        if(j==s2)   printf("Yes\n");
        else   printf("No\n");
    }
return 0;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注