1、题目描述
给你一个字符串s和一个字符串p,请问最少去掉s中多少个字符,才能使得p是s的子串?
2、示例
输入:
axb
ab
输出:1
3、题解
基本思想:动态规划
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class Solution{
public:
int substrmatching(string s,string p)
{
//基本思想:动态规划
vector<vector<int>> dp(s.size()+1,vector<int>(p.size()+1,9999));
dp[0][0]=0;
for(int i=1;i<=s.size();i++)
dp[i][0]=0;
for(int i=1;i<=s.size();i++)
{
for(int j=1;j<=p.size();j++)
{
if(s[i-1]==p[j-1])
dp[i][j]=dp[i-1][j-1];
else
dp[i][j]=min(dp[i][j],dp[i-1][j]+1);
}
}
int res=9999;
for(int i=p.size();i<=s.size();i++)
res=min(res,dp[i][p.size()]);
return res;
}
};
int main()
{
string s="axb",p="ab";
Solution solute;
cout<<solute.substrmatching(s,p)<<endl;
return 0;
}
本文介绍了一个使用动态规划解决字符串匹配问题的方法。通过构建二维DP数组,实现求解最少删除次数使一个字符串成为另一个字符串的子串的目标。文章提供了一个具体的示例,并给出了完整的C++实现代码。
&spm=1001.2101.3001.5002&articleId=116999779&d=1&t=3&u=3578c6fbcc9844e7924006d4ddb65497)
2789

被折叠的 条评论
为什么被折叠?



