字符串算法总结

Posted by 大雁小鱼的博客 on May 31, 2018

字符串算法总结

题目1:

判定一个字符串是不是回文串。回文是一个正读和反读都相同的字符串,例如“ABA”是回文,而“ABC”不是。
思路:双指针算法,一个指针指向头,另一个指针指向尾,两指针不断靠拢,过程中只要判定有一个不相等,就不是回文,否则就是回文。

题目2:

寻找一个字符串中最长回文串。回文是一个正读和反读都相同的字符串,例如“ABA”是回文,而“ABC”不是。

解决方案

方法#1 动态规划
如果我们已经知道“BAB”是回文,那么狠明显,“ABABA”一定是回文,因为它左首字母和右首字母相同。 规律是如果str[i..j]是回文串,那么str[i-1,j+1]是回文串的充分必要条件是str[i-1] == str[j+1],因此可以得到如下递推公式

递推的初始条件

这就是一个典型的动态规划解法,我们首先对一字母和二字母的回文进行初始化,然后找到所有三字母回文,并依此类推…
参考网址:https://leetcode-cn.com/articles/%E6%9C%80%E9%95%BF%E5%9B%9E%E6%96%87%E5%AD%90%E4%B8%B2/

题目3:

最大公共子序列
思路,动态规划,递归思路是如果str[i..j]的最大公共子序列是dp[i..j],那么str[i..j+1]的最大公共子序列满足方程