发现好久没来更新了,开学之后各种杂事,好久都没学习算法了,还好最近马上要学习计导里有关算法的部分了。明天还要预习一下,今天先暂时把上次写完的困难的串(“好久之前的事”)更新一下,再在十一假期中强烈补充算法知识。
困难的串仍然是回溯法的部分,既然是回溯法那么就要DFS然后及时返回。
题目:如果一个字符串包含两个相邻的重复子串,则称它是”容易的串“,其他串成为”困难的串“。例如”ABCDABCD“是容易的串,而”ABDAB“是困难的串。
输入正整数n和L,输出由前L个字符组成的,字典序第n小的困难的串。
样例输入:73
303
样例输出:ABACABA
ABACABCACBABCABACABCACBACABA
当然处理重复字串的内容,就要进行枚举字串的长度和起始位置。既然是重复字串,总字串长度一定是偶数,但是这种想法并没有利用到之前的串来进行后续判断。 要用回溯来看。
bool is_diff(int cur)
{
//判断后缀的话最长也就是和之前已经排完的长度一样cur+1表示已经排完的数的长度
for(int j=1;
j+j<=cur+1;
j++)//循环确定所要判断的子串长度
{
//开始判断
int equal = 1;
//此处必须用equal变量来记录
for(int k=0;
k
【【算法学习笔记】15.暴力求解法04 回溯法02 困难的串】
推荐阅读
- 算法学习笔记|【算法学习笔记】02.wikioi1205 单词翻转
- 算法学习笔记|【算法学习笔记】14.暴力求解法03 回溯法01 N皇后和素数环
- 【算法学习笔记】22.算法设计初步 二分查找 上下界判断
- 解题报告|【算法学习笔记】23.动态规划 解题报告 SJTU_OJ 1280 整装待发
- 算法学习笔记|【算法学习笔记】19.算法设计初步 最大子列和问题的三种方法
- 算法学习笔记|【算法学习笔记】20.算法设计初步 归并排序 求逆序数