【算法学习笔记】15.暴力求解法04 回溯法02 困难的串

发现好久没来更新了,开学之后各种杂事,好久都没学习算法了,还好最近马上要学习计导里有关算法的部分了。明天还要预习一下,今天先暂时把上次写完的困难的串(“好久之前的事”)更新一下,再在十一假期中强烈补充算法知识。

 

困难的串仍然是回溯法的部分,既然是回溯法那么就要DFS然后及时返回。

 

题目:如果一个字符串包含两个相邻的重复子串,则称它是”容易的串“,其他串成为”困难的串“。例如”ABCDABCD“是容易的串,而”ABDAB“是困难的串。
输入正整数n和L,输出由前L个字符组成的,字典序第n小的困难的串。
样例输入:7   3
                 30  3
样例输出: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


 

 

 

你可能感兴趣的:(算法学习笔记)