0%

回文字符串是一类常见的题目,首先我们要区分两个概念:

  • 回文子串(palindromic substring),要求某个字符串s的连续的一个子串$s[i…j]$是回文串;
  • 回文子序列(palindromic subsequence),不要求连续性,是通过对于字符串进行删减得到的序列,$s[i],s[j],s[k],j - i >= 1$满足回文性质。
阅读全文 »

区间动态规划是很重要的一种动态规划类别,对于这种问题,要仔细分析理解题意,建立从小区间构造大区间的方法。下面我们以几个leetcode上面的题目为例给出分析思路和解析。在所有这些题目中,有一点往往是一样的:我们一般都是对最终的结果建立dp数组,也就是dp中的单个元素往往表示的是给定区间内的最优解,这一点在思考dp问题的时候尤为重要。

阅读全文 »

最长公共递增子序列(Longest Common Increasing Subsequence, LCIS)是LCSLIS的结合体,比这两个基本形式都复杂一些。下面我们将以一道GeeksForGeeks上面的题目对这个问题进行解析和求解。

阅读全文 »

最长递增子序列(Longest Increasing Subsequence, LIS)属于最基本也是最经典的动态规划问题,下面我们将以一道LeetCode上面的题目对这个问题进行解析和求解。

阅读全文 »

最长公共子序列(Longest Common Subsequence, LCS)属于最基本也是最经典的动态规划问题,下面我们将以一道LeetCode上面的题目对这个问题进行解析和求解。

阅读全文 »

I have used (neo)vim for many years. I think it greatly improved my work efficiency. And I want to share my configure with others to make more people can benefit from the (neo)vim.

As you may have noticed, I use (neo)vim to denote the vim. That is because I have switched to the neovim several months ago. I don’t want to compare which one is better, both of them are very good editors, and many programmers contributed a lot for them. For me, I switch to the neovim for the following reasons:

  • I think the neovim will introduce new features more positively, I am willing to try the new functions.
  • I think the neovim is more friendly to the developers, I hope I can also contribute to it.
  • There are some new features in the neovim, e.g., terminal, asynchronous job, float windows, etc. Although, they are also introduced in the newer vim.
阅读全文 »

模拟退火是一种通用概率算法,常用来在一定时间内寻找在一个很大搜寻空间中的近似最优解。和爬山算法相比,模拟退火算法以一定的概率接受不好的迭代,从而跳出局部最优。

下面我们尝试使用模拟退火算法来解决上篇文章中的几个问题:

阅读全文 »

爬山算法是一种局部择优的方法,采用启发式方法,是对深度优先搜索的一种改进,它利用反馈信息帮助生成解的决策。

爬山算法一般存在以下问题:

  1. 局部最大
  2. 高地:也称为平顶,搜索一旦到达高地,就无法确定搜索最佳方向,会产生随机走动,使得搜索效率降低。
  3. 山脊:搜索可能会在山脊的两面来回震荡,前进步伐很小。
阅读全文 »