首页 > 代码库 > 最少插入字符分析
最少插入字符分析
题目来源,待字闺中,原创@陈利人 ,欢迎大家继续关注微信公众账号“待字闺中”
原题给定字符串,可以通过插入字符,使其变为回文。求最少插入字符的数量。例如:
1. ab最少插入1个字符,变为*b*ab
2. aa最少插入0个字符
3. abcd最少插入3个字符,*dcb*abcd
分析:根据回文串的定义,很容易获得递归思路,首先比较第一个和最后一个字符,相等则插入个数等于中间的插入个数,不等,则可以通过在开头或最后添加一个字符,使得两头相等,比如abcd可以转化为abcda或dabcd,这样,递归方程为:当str[i]==str[j]时,fun(i,j)=fun(i+1,j-1);否则fun(i,j)=min(fun(i+1,j),fun(i,j-1))+1.容易看出,该递归具有重复子序列,加上题目要求最短,故有最优的含义,故可转化为动态规划,动态规划的转移方程一般和递归方程一样,只是求解时需要利用先前的结果。本题中,可以看出求解方向是从两头向内部,和回文串的判断一样,动态规划的思路是先求len=1,然后len=2,然后……,故可得如下代码:int minInsertChar(char* src) { if(src =http://www.mamicode.com/= NULL)return -1;>本代码只代表个人观点,如有错误,请指正,谢谢
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。