zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    mysql的root用户无法建库的问题
    jmeter连库获取sql结果存为参数给下一接口用
    webservice接口问题
    今日杂记-20190623
    接口测试
    pyenv和virtualenv管理python的版本(多个版本同时用)
    安装禅道
    经典题,类中的变量
    CSS简介
    python单元测试unittest
  • 原文地址:https://www.cnblogs.com/huaszjh/p/4684342.html
Copyright © 2011-2022 走看看