C - YesOrNo

Description
A国认为如果字符串a可以通过操作X变成字符串b,就认为是一样的字符串。


操作X:将字符串分为两部分,然后调换位置,操作次数不限。W=xy,W’=yx。


Input
有多组测试数据,处理到文件结尾。每组测试数据包含两个个字符串(包含英文字符和数字,长度为[1,500000])。


Output
对于每组测试数据,如果两个字符串是相同的,输出Yes或者是No。


Sample Input
YesOrNo
NoOrYes
YesOrNo
rNoYesO
Sample Output
No 

Yes

#include<iostream>
#include<stdio.h>
#include<cstring>
#include<cstdlib>
using namespace std;
char a[500005];
char b[500005];
char c[500005];
int main()
{
    int i;
    int alen,blen;
    int flag;
    while(scanf("%s%s",a,b)!=EOF)
    {
        getchar();
        alen=strlen(a);
        blen=strlen(b);
        if(alen!=blen)
        {
            printf("No\n");
            continue;
        }
        flag=0;
        for(i=0; i<alen; i++)
        {
            if(b[0]==a[i])
            {
                strncpy(c,a+i,alen-i);
                strncpy(c+alen-i,a,i);
                c[alen]='\0';
                if(strcmp(b,c)==0)
                {
                    flag=1;
                    break;
                }
            }
        }
        if(flag==1)
            printf("Yes\n");
        else
        printf("No\n");

    }
    return 0;
}

法2:

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
int main()
{
    string s1,s2;
    while(cin>>s1)
    {
        cin>>s2;
        if(s1.size()!=s2.size())
        {
            cout<<"No"<<endl;
            continue;
        }
        else if(s1==s2)
        {
            cout<<"Yes"<<endl;
            continue;
        }

        int len=s1.size();
        int flag=0;
        if(s1.size()==2)
        {
            if(s1[0]=s2[1]&&s1[1]==s2[0])
            {
                printf("Yes\n");
                continue;
            }

        }
        string s3,s4,s5;
        for(int i=0;i<len;i++)
        {
           if(s2[0]==s1[i])
           {
                s3.assign(s1,0,i);
               //cout<<s3<<endl;
                s4.assign(s1,i,len-i+1);
                //cout<<s4<<endl;
                s5=s4+s3;
               //cout<<s5<<endl;
               if(s5==s2)
               {
                   flag=1;
                   break;
               }
           }

        }
        if(flag==1)
        printf("Yes\n");
        else if(flag==0)
        printf("No\n");
    }
    return 0;
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值