zoukankan      html  css  js  c++  java
  • hautoj 1268 小天使改名

    1268: 小天使改名

    时间限制: 2 秒  内存限制: 128 MB
    提交: 437  解决: 123
    提交 状态 

    题目描述

    小天使的b站帐号被大家发现啦。于是小天使决定改名,将他原有ID中的两个不同位置的字母进行交换。(小天使有可能将两个不同位置的相同字母进行交换,虽然这样做他的ID并没有发生变化)
    Lsf知道小天使原来的ID,他想知道某个ID是否可能是小天使的新ID。

    输入

    第一行为数据组数T(T≤100)。
    每组数据的第一行是字符串s1,(2≤length(s1)≤1000),为小天使的原始ID。
    第二行是字符串s2,(length(s2)=length(s1)),为Lsf猜测的ID。
    s1,s2均只含小写字母。

    输出

    对每组数据输出一行,如果这个ID可能是小天使的新ID,输出YES,否则输出NO。

    样例输入

    3
    ch
    hc
    aa
    aa
    abc
    abb
    

    样例输出

    YES
    YES
    NO
    
    说来惭愧,第一次组队参加线下比赛,卡在这题上,怎么都找不到错误,导致一个队伍三个人心态爆炸。

    后来才发现一个坑,就是没有交换,没有相同字符的时候,前后相等的输出是no。
    如样例:
    输入:
    ch
    ch
    输出:
    NO

     1 #include<cstdio>
     2 #include<cstring>
     3 #define Max 1111
     4 char s1[Max],s2[Max];
     5 int main()
     6 {
     7    int t;
     8    scanf("%d",&t);
     9    while(t--)
    10     {
    11         int ascii[222]={0};
    12         int flag=0,f=0;
    13         int u,v;
    14         scanf("%s %s",s1,s2);
    15         int len=strlen(s1);
    16         for(int i=0;i<len;i++)  //判断字符串内有没有相同的字符,如果有,则f++,否则 f=0 
    17         {
    18            int x=s1[i];
    19            ascii[x]++;
    20            if(ascii[x]>1)
    21             {
    22                f++;
    23                break;
    24             }
    25         }
    26         for(int i=0;i<len;i++)   //找出两个不同处 
    27         {
    28            if(flag==1&&s1[i]!=s2[i])
    29             {
    30                v=i;
    31                break;
    32             }
    33            if(s1[i]!=s2[i])
    34             {
    35                u=i;
    36                flag=1;
    37             }
    38         }
    39         if(flag==1)   //如果存在两处不同,则将其位置置换。 
    40         {
    41            int temp=s1[v];
    42            s1[v]=s1[u];
    43            s1[u]=temp;
    44         }
    45         if(!strcmp(s1,s2))  
    46         {
    47            if(flag==0&&f==0)  //若两字符串相等且未置换且单个字符串内无重复字符,则不会是改后的名字 
    48            printf("NO
    ");
    49            else
    50            printf("YES
    ");
    51         }
    52        else
    53        printf("NO
    ");   
    54     }
    55    return 0;
    56 }

  • 相关阅读:
    家庭养花秘笈1000问
    生活中来3000例·健康篇
    生命的奥秘百科(套装共10册)
    海军陆战队6:太空战舰
    历史文明探秘百科(套装共10册)
    中医养生知识读本
    上工养生话刮痧
    古法艾灸
    钻井液处理剂及其作用原理
    重金属污泥处理技术与管理
  • 原文地址:https://www.cnblogs.com/zmin/p/6786337.html
Copyright © 2011-2022 走看看