科大讯飞算法岗笔试题2,让字符串成为回文串的最少删除次数

题目描述

思路

这道题思路很难想到讯飞的原描述是需要删除的次数。当然将不是回文子序列的删除与插入不同的字符是一个意思

例如 mbadm 与 mdabm 最大公共子序列为

mam

如果删除 则需要删除bd

如果插入 也只需要 插入bd

代码

class Solution {
public:
    int minInsertions(string s) {
        string s1=s;
        string s2=s;
        vector<vector<int>> dp(s1.size()+1,vector<int>(s1.size()+1,0)); //dp[i][j] 前i个前j个的最大公共子序列长度 
		reverse(s1.begin(),s1.end());
		for(int i=1;i<=s1.size();i++)
		{
			for(int j=1;j<=s1.size();j++)
			{
				if(s1[i-1]==s2[j-1]) //注意下标开始为i-1 j-1
				{
					dp[i][j] = dp[i-1][j-1]+1;	
				}else
				{
					dp[i][j] = max(dp[i-1][j],dp[i][j-1]);
				}
			}
		}
        return s1.size()-dp[s1.size()][s1.size()];
    }
};

题目链接 https://leetcode-cn.com/problems/minimum-insertion-steps-to-make-a-string-palindrome/

参考 https://www.bilibili.com/video/BV1KJ411p7Rp

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页