题目链接: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 }

转载于:https://www.cnblogs.com/huaszjh/p/4684342.html

Equivalent String相关推荐

  1. LeetCode 1061. Lexicographically Smallest Equivalent String

    原题链接在这里:https://leetcode.com/problems/lexicographically-smallest-equivalent-string/ 题目: Given string ...

  2. Linux string.c源文件 [转]

    Linux string.c 注:了解各字符串函数的实现及技巧 // SPDX-License-Identifier: GPL-2.0 /** linux/lib/string.c** Copyrig ...

  3. java pattern.quote_Java Pattern quote(String)用法及代码示例

    Pattern类的quote(String)方法用于为作为参数传递给方法的指定String返回文字模式Pattern String.此方法产生一个等效于s的String,可用于创建Pattern.输入 ...

  4. 编码中统一更该变量的快捷键_更多项目想法,以提高您的编码技能

    编码中统一更该变量的快捷键 Two weeks ago I published an article containing 15 project ideas that you can build to ...

  5. 高效查看MySQL帮助文档的方法

    高效查看MySQL帮助文档的方法 在mysql的使用过程中, 可能经常会遇到以下问题: 某个操作语法忘记了, 如何快速查找? 如何快速知道当前版本上某个字段类型的取值范围? 当前版本都支持哪些函数?希 ...

  6. c 语言字符串转二进制,在C ++中将字符串转换为二进制序列

    在本教程中,我们将讨论将字符串转换为二进制序列的程序. 为此,我们将提供一个字符串.我们的任务是将每个字符转换为等效的二进制字符,并打印出来以分隔不同字符. 示例#include using name ...

  7. python 复制dict_超全的Python 字典(Dictionary)介绍

    字典是另一种可变容器模型,且可存储任意类型对象. 字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ,格式如下所示: 键一 ...

  8. 如何做到 byte[] 和 十六进制 互转?

    咨询区 alextansc: 请问我如何实现将 byte[] 和 十六进制的string 进行互转? 回答区 balrob: 如果你的程序是基于 .NET5 的,可以使用 Convert 下新增的两个 ...

  9. Linux 汇编学习

    为什么80%的码农都做不了架构师?>>>    ____| | | _) ___| | __| | _ \ __| __| __| _ \ __ \ | __|\___ \ _ \ ...

  10. 怎么查看mysql帮助文档_高效查看MySQL帮助文档的方法

    在mysql的使用过程中, 可能经常会遇到以下问题: 某个操作语法忘记了, 如何快速查找? 如何快速知道当前版本上某个字段类型的取值范围? 当前版本都支持哪些函数?希望有例子说明.. 当前版本是否支持 ...

最新文章

  1. 疫情之下,武汉女生在家中答辩,获得国外博士学位!
  2. 为网站加入Drupal星球制作RSS订阅源
  3. 涨知识!提单及运输业务中常用的一些代码、术语及意义!
  4. leetcode287. 寻找重复数(二分法)
  5. LeetCode 668. 乘法表中第k小的数(二分查找)
  6. 新模型SkipNet在ImageNet分类任务大放光彩!优化损失函数!
  7. Anaconda各版本安装包存档
  8. (79)FPGA版本如何管理?
  9. FreeRTOS内核实现04:空闲任务与阻塞延时
  10. python程序精确法求解反应谱,傅里叶谱,功率谱
  11. markdown温习笔记
  12. Windows10使用屏幕键盘
  13. 腾讯WeTestTesterHome深圳线下沙龙
  14. 数据集的文字标签(label)转成数字标签
  15. 反向代理-- WEB服务的加速器[转]
  16. linux设置广播路由,如何设置路由器开启ssid广播 路由器开启ssid广播的详细方法...
  17. 安卓查看内存读写测试软件_关于手机运行内存的四大误区,你信了几个?
  18. Meta-RL之Optimization as a Model for Few-Shot Learning
  19. python文本去重复_python多个文本组合后去除重复项
  20. 统计项目代码行数 intelliJ idea statistic 插件

热门文章

  1. java 常见关键字的使用
  2. node.js学习笔记之浅谈观察者模式
  3. 使用scrapy的定制爬虫-第三章-爬虫的javascript支持
  4. 【配置关系】—Entity Framework实例详解
  5. Linq 操作XML文件
  6. protobuf编码原理及其在schema格式转换的应用
  7. php mysql 用户修改_PHP+MYSQL实现用户的增删改查,mysql增删_PHP教程
  8. c++中的explicit关键字及隐式类型转换
  9. Redis缓存组件开发规范
  10. tomcat access log pattern