问题描述
给定字符串 x = x0…n-1,为构造x为回文最少需要插入几个字符。
例如:
- x: Ab3bd
- 可以构造 “dAb3bAd” 或 “Adb3bdA” 通过插入两个字符
问题分析
设Dij表示构造xi…j为回文需插入的最少字符数。
- 初始情况:
Dii = Di,i-1 = 0 - xi = xj
Dij = Di + 1,j-1 - xi != xj
Dij = min{Di+1,j,Di,j-1} + 1
Coding
递归实现
1 | int count_for_dailog(char * x, int i , int j) |
时间复杂度
递归实现的时间复杂度为2^n ,最坏情况为,x内所有字符无重复。
动态规划法
1 | int count_for_dailog(char * x , int n){ |
时间复杂度
递归实现的时间复杂度为n^2。
测试代码
1 | char * x = "Ab3bd"; |
Output
1 | Ab3bd length = 2 |
如果对你有帮助的话,Star✨下一吧!