题目描述:

有一天Jerry给Tom出了一道题来考验他。
Jerry给了Tom一个长度为2*n的只包含小写字母的字符串,让Tom将这个字符串任意挑选字符,将其分成两个等长的字符串a和b(对于一个si不能同时被选到a和b中),然后a要和reverse(b)相同(a和反转后的b相同),问这样的方案数有多少?Tom有些为难,所以请你来帮帮他吧。

解题思路描述:
本题的关键在于理解题意:所谓挑选n个字符变成a和b两个字符串,是指在原字符串中抽出n个字符,这些字符的的顺序保持不变,剩下字符的顺序也保持不变,由此组成a和b两个字符串。

例如 “abcdef”,挑选第2、3、5个字符,则分成 “bce” 和 “adf” 两个串。

接下来是整理的思路解析:整体框架是dfs,枚举每个字符属于a还是属于b,搜索过程中需要利用a和b的对称性做加速处理,否则会超时。

比方说
xcccddcccxdd

从左往右枚举a字符串的构成,如果令第一个x属于a,根据对称性,倒数第三个字符x一定是属于b;如此推导出末尾的dd一定属于a,中间位置的dd一定属于b,而且是b的头两个字符;然后左边ccc一定a,右边ccc一定是b,由此得出1种方案。令第一个x属于b也可以用同样的方式得到1种方案。

用这个思路直接写代码不太好写,可以通过枚举二进制,固定左半边的选择情况,然后对于每一个case,通过dfs搜索右半边有多少种合法组合,搜索过程中利用对称性进行剪枝。

对于字符全部相同case如"aaaaaaaa",因为过程中无法剪枝,会退化成2^(2*n)。对于这种case,答案就是 C(2n,n) ,预判一下直接返回即可。
————————————————
版权声明:本文为CSDN博主「fengshui_li」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/fengshui_li/article/details/106975532

阿里云课堂-day06相关推荐

  1. 阿里云课堂:云安全的架构设计与实践之旅

    10月25日下午,阿里云课堂第二期<云安全的架构设计与实践>在上海光大会展中心国际大酒店举行.此次公开课试图让更多的开发者深入了解到云安全架构那些事儿.当然云安全的架构设计背后有大量的技术 ...

  2. 阿里云课堂·云安全·Web应用安全认知(笔记)

    Web应用安全认知 主要内容 Web应用的主要威胁 SQL注入攻击分类.方式 SQL注入攻击的防御 XSS攻击的分类.方式 XSS攻击的防御方法 文件上传攻击的分类.方式 文件上传攻击的防御 1.OW ...

  3. AI公开课:18.05.05 施尧耘(阿里云量子技术CS)—清华AI第四讲之《人工智能与量子计算》Quantum课堂笔记——带你了解量子计算

    AI公开课:18.05.05 施尧耘(阿里云量子技术CS)-清华AI第四讲之<人工智能与量子计算>Quantum课堂笔记--带你了解量子计算 导读 清华大学"人工智能前沿与产业趋 ...

  4. 阿里云互动课堂解决方案助力淘宝教育,打造普惠教育平台

    近日,阿里巴巴淘宝教育推出普惠教育平台,为贵州省印江县当地中学捐赠在线授课平台.IOT智能魔笔等软硬件设备.平台基于阿里云视频云的互动课堂直播技术打造,打破空间的限制,实现了教育的地域连接,将发达地区 ...

  5. 阿里云【名师课堂】Java零基础入门24 ~ 26:方法的定义与使用

    阿里云[名师课堂]Java零基础入门24 ~ 26:方法的定义与使用 24:方法的基本定义 无返回值无参数 无返回值有参数 有返回值有参数 25:方法重载(重点) 26:方法递归调用 24:方法的基本 ...

  6. 阿里云【名师课堂】Java面向对象开发57 ~ 59:覆写

    阿里云[名师课堂]Java面向对象开发57 ~ 59:覆写 57:方法覆写 概念 访问权限 重载和覆写的区别 58:属性覆盖(了解) 59:super关键字 调用父类方法 调用父类属性 super与t ...

  7. 阿里云【名师课堂】Java面向对象开发2:面向对象简介

    阿里云[名师课堂]Java面向对象开发2:面向对象简介 编程语言发展阶段 编程语言发展阶段 面向机器语言:汇编语言 面向过程语言:C语言.FORTRAN等 面向对象语言:Java等 面向过程的核心是编 ...

  8. 阿里云【名师课堂】Java零基础入门6:CLASSPATH环境属性

    阿里云[名师课堂]Java零基础入门6:CLASSPATH环境属性 一.具体内容 二.总结 一.具体内容 CLASSPATH指的是类的加载路径,是一个路径列表,用于搜索Java编译或者运行时所用到的类 ...

  9. 阿里云【名师课堂】Java高级开发18 ~ 21:Annotation

    阿里云[名师课堂]Java高级开发18 ~ 21:Annotation 课时18:代码开发逻辑 课时19:准确覆写@Override 课时20:过期声明@Deprecated 课时21:压制警告@Su ...

最新文章

  1. Docker实战9 之Dockerfile深入实践
  2. vue 生命周期 笔记
  3. plsql 参数中in out in的区别讲解
  4. js 实现2的n次方计算函数_密码杂凑函数的基本性质探讨
  5. 三层架构和MVC一样吗?(区别)
  6. CodeForces - 1076D Edge Deletion(最短路+贪心/最短路树+bfs)
  7. python保存和加载数组
  8. Ubuntu定制live cd
  9. 艺术创意灵感地---集设网 | 人体彩绘的张力
  10. python开发ios程序_使用Python开发iOS程序
  11. 第一章 HTML基础
  12. 《海洋测绘十年》序言
  13. 面向过程与面向对象有什么区别
  14. 返款接口教程,转账到支付宝账户开通方法
  15. [HackWifi]wifi破解详解
  16. 2018年最新黑马前端视频教程视频与源码全集
  17. Hint: If you want to see a list of allocated tensors when OOM happens,
  18. BackFile备份文件
  19. 北京高校大学生创业园(软件园):助力梦想扬帆起航
  20. 梦入神机:星河大帝2

热门文章

  1. 64位字长的高性能微型计算机,地址总线字长内存容量寻址范围之间的计算
  2. Linux 升级到指定内核(Centos7 yum升级内核、centos系统中kernel-devel)
  3. 使用IPFS作为Java项目的文件系统
  4. PCB表面处理工艺之OSP的优缺点?
  5. 牛顿法的matlab实现
  6. 数字领航 科技赋能 | 优锘科技与新华三强强联手加速智慧医院可视化进程!ThingJS
  7. 人工智能技术会代替人类的工作吗
  8. android屏幕刷新显示机制
  9. python截取字符串后三位_python如何截取字符串后几位
  10. 视频的码率、帧率、分辨率之间的区别