摘要: 想到字符串匹配,我们一下子就会想到暴力匹配,但是这种暴力匹配的算法时间复杂度太高,顾前人便发挥聪明才智,发明了KMP算法。 KMP算法需要两步: 1)构造next数组 next[j] = k的含义是当j位置失配时,指针跳到k位置处 2)利用next数组进行字符串匹配 #include <iostre 阅读全文
posted @ 2020-02-29 10:54 宝宝的你叔叔 阅读(118) 评论(0) 推荐(0)
摘要: 题目描述:最大公共子串长度问题就是:求两个串的所有子串中能够匹配上的最大长度是多少。比如:"abcdkkk" 和 "baabcdadabc",可以找到的最长的公共子串是"abcd",所以最大公共子串长度为4。下面的程序是采用矩阵法进行求解的,这对串的规模不大的情况还是比较有效的解法。题目解析: 求最 阅读全文
posted @ 2020-02-28 22:40 宝宝的你叔叔 阅读(171) 评论(0) 推荐(0)
摘要: 问题描述:有ABC三个字母,给出每个字母的个数,问能得到多少个固定长度的串。 问题解析:这个问题很简单,使用递归,每一次可以选择ABC三个字母中的任意一个,前提是字母的个数不为0。当总长度为指定长度时,表示得到一中组合方案。 代码如下: #include <iostream>using namesp 阅读全文
posted @ 2020-02-28 22:06 宝宝的你叔叔 阅读(235) 评论(0) 推荐(0)
摘要: 题目描述: 6x6的方格,沿着格子的边线剪开成两部分。要求这两部分的形状完全相同。问有几种合法的分割方法?? 如图,这就是一种合法的分割方法: 题目解析:第一次看这个题目,很容易想到是dfs深度优先搜索,但是并没有想到从线条的方面来做dfs,而是从方格的角度来做dfs,浪费了很长的时间。废话不多说。 阅读全文
posted @ 2020-02-28 21:33 宝宝的你叔叔 阅读(292) 评论(0) 推荐(0)
摘要: 使用宽度优先搜索的题目--给你一个初始状态,问到达某一个状态最少需要多少步? 此时使用宽度优先搜索,利用队列将每一个状态放入队列中,同时需要维护对应状态对应的步数。 废话不多说,关门放题!! 跳蚱蜢 有9只盘子,排成1个圆圈。 其中8只盘子内装着8只蚱蜢,有一个是空盘。 我们把这些蚱蜢顺时针编号为 阅读全文
posted @ 2020-02-28 01:54 宝宝的你叔叔 阅读(289) 评论(0) 推荐(0)
摘要: 动态规划简介 动态规划方法代表了这一类问题(最优子结构或者子问题最优性)的一般解法,是设计方法或者策略,不是具体算法。 动态规划的本质是递推,核心是找到状态转移的方式,写出dp方程,最利于解决重叠子问题(比如斐波那契方程)。 形式: 记忆型递归 递推 下面讲解下01背包问题: 问题描述:有n个重量和 阅读全文
posted @ 2020-02-26 15:52 宝宝的你叔叔 阅读(189) 评论(0) 推荐(0)
摘要: 快速排序其实是使用分治法的思想,即在原数组中找一个数p,然后将原数组中比数p大的数放到此数的右边,比数p小的数放到次数的左边。 口诀:1.找中轴 2.左边快排 3.右边快排 主体代码如下: void quick_sort(int * data,int left,int right){ if(left 阅读全文
posted @ 2020-02-26 00:32 宝宝的你叔叔 阅读(214) 评论(0) 推荐(0)
摘要: 快速排序很简单,分为三步: 1.找中轴 2.左边快排 3.右边快排 注意事项:每一次快排之前都要判断左边的下标是否小于右边的下标 代码如下: void quick_sort(int * data,int left,int right) { if(left < right) { int index = 阅读全文
posted @ 2020-02-25 22:43 宝宝的你叔叔 阅读(1378) 评论(0) 推荐(0)