LeetCode 1312. 让字符串成为回文串的最少插入次数(区间dp)
作者:互联网
题意:
给你一个字符串 s ,每一次操作你都可以在字符串的任意位置插入任意字符。
请你返回让 s 成为回文串的 最少操作次数 。
「回文串」是正读和反读都相同的字符串。
数据范围:
1 <= s.length <= 500
s 中所有字符都是小写字母。
解法:
令d[i][j]表示[i,j]成为回文的最少插入次数,
当s[i]=s[j]时,d[i][j]可以由d[i+1][j-1]转移,代价为0,
同时,d[i][j]还可以由d[i+1][j]和d[i][j-1]转移,代价为1.
code:
class Solution {
public:
int d[555][555];
int minInsertions(string s) {
int n=s.size();
memset(d,0,sizeof d);
for(int len=1;len<=n;len++){
for(int i=0;i<n;i++){
int j=i+len-1;
if(j>=n)break;
if(len==1)d[i][j]=0;
else{
d[i][j]=1e9;
if(s[i]==s[j]){
d[i][j]=min(d[i][j],d[i+1][j-1]);
}
d[i][j]=min(d[i][j],d[i+1][j]+1);
d[i][j]=min(d[i][j],d[i][j-1]+1);
}
}
}
return d[0][n-1];
}
};
标签:1312,min,int,len,插入,字符串,LeetCode,dp,回文 来源: https://blog.csdn.net/weixin_44178736/article/details/113823226