• Equivalent String


    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=84562#problem/E
    题意:

           给定两组字符串a和b(由小写字母构成),判断是否相等。相等条件如下:

           1)若a和b为奇数字符串,只需判断字符串是否一致;

           2)若a和b为偶数字符串,可将字符串分为长度相等的两部分,再进行比较。如将a分为长度相等的a1和a2两部分,将b分为长度相等的b1和b2两部分,若a1与b1相等且a2与b2相等,或者a1与b2相等且a2与b1相等,则a与b相等。
    案例:

           Input

       aaba
    
    abaa
          Output
       YES
           Input
       aabb
    
    abab
          Output
       NO


    分析:

           奇数字符串与偶数字符串条件判断有所差异,但可以考虑将偶数字符串不断拆分,最终成为奇数字符串与奇数字符串的比较(比如字符长度为6的两字符串之间进行比较,可以拆分为3+3两部分,再根据相等条件进行比较,又如字符串长度为8的两字符串之间进行比较,单个字符串可以先拆分为4+4,再将每部分拆分为2+2,2为偶数重复刚才的步骤2拆分为1+1再根据等价条件进行比较),如此一来,采用DFS及暴力求解得出最终结果。阐述不清,阅览如下具体步骤可知。
    源代码:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 using namespace std;
     5 # define maxn 200000
     6 char a[maxn],b[maxn];
     7 int dfs(char *m,char *n,int len)
     8 {   
     9     int k=0;
    10     if(len%2==1)//判断奇数字符串是否相等
    11     {
    12         for(int i=0;i<len;i++)
    13         {   if(m[i]!=n[i])//k值判断字符串中不等字符个数
    14                k++;
    15         }
    16         if(!k)    return 1;
    17         else return 0;
    18     }
    19     else//判断偶数字符串
    20     {
    21         if((dfs(m,n,len/2)&&dfs(m+len/2,n+len/2,len/2))||(dfs(m+len/2,n,len/2)&&dfs(m,n+len/2,len/2)))//偶数字符串相等判断条件
    22             return 1;
    23         else return 0;
    24     }
    25 }
    26 int main()
    27 {   
    28     scanf("%s%s",a,b);//输入字符串
    29     if(dfs(a,b,strlen(a)))//判断字符串相等
    30        cout<<"YES"<<endl;
    31     else cout<<"NO"<<endl;
    32     return 0;
    33 }
  • 相关阅读:
    Dependency property changed example
    业务数据分析
    WPF : 以鼠标指针为中心缩放
    WPF待学习问题列表(未完)
    GirdView前台数据类型转换
    牛人的博客
    使用Xpath对XML进行模糊查询
    XPath语法
    【HDU】3415 Max Sum of MaxKsubsequence
    【HDU】3474 Necklace
  • 原文地址:https://www.cnblogs.com/huaszjh/p/4684342.html
Copyright © 2020-2023  润新知