利用动态规划解决-字符串的匹配问题
2016-09-20 15:53
253 查看
也可以找字符串的最大子序列,然后相减即可,但没有验证过。
int main ()
{
string s1,s2;
while( cin>>s1>>s2)
{
int len1 = s1.size();
int len2 = s2.size();
vector<vector<int>> dp(len1+1, vector<int>(len2+1,0));
for(int i = 0; i <= len1; i++)
dp[i][0] = i;
for(int i = 0; i <= len2; i++)
dp[0][i] = i;
//
for(int i = 1; i <= len1; i++){
for(int j = 1; j <= len2; j++){
if(s1[i-1] == s2[j-1])
dp[i][j] = dp[i-1][j-1];
else{
int tmp = min(dp[i-1][j], dp[i][j-1]);
dp[i][j] = 1 + min(tmp, dp[i-1][j-1]);
}
}
}
cout<<dp[len1][len2]+1<<endl;
}
return 0;
}
int main ()
{
string s1,s2;
while( cin>>s1>>s2)
{
int len1 = s1.size();
int len2 = s2.size();
vector<vector<int>> dp(len1+1, vector<int>(len2+1,0));
for(int i = 0; i <= len1; i++)
dp[i][0] = i;
for(int i = 0; i <= len2; i++)
dp[0][i] = i;
//
for(int i = 1; i <= len1; i++){
for(int j = 1; j <= len2; j++){
if(s1[i-1] == s2[j-1])
dp[i][j] = dp[i-1][j-1];
else{
int tmp = min(dp[i-1][j], dp[i][j-1]);
dp[i][j] = 1 + min(tmp, dp[i-1][j-1]);
}
}
}
cout<<dp[len1][len2]+1<<endl;
}
return 0;
}
相关文章推荐
- 利用动态规划解决交叉字符串问题
- 利用栈解决符号匹配问题
- 利用动态规划解决实际问题之多次兑换获取最大外汇收益
- 利用动态规划(DP)解决 Coin Change 问题
- 利用匈牙利算法&Hopcroft-Karp算法解决二分图中的最大二分匹配问题 例poj 1469 COURSES
- 动态规划解决字符串交错组成问题
- java字符串星号、问号匹配问题解决方法
- PHP的preg_match匹配字符串长度问题解决方法
- 正则表达式匹配不包含特定字符串解决匹配溢出问题
- 利用Trie图模板解决多模匹配问题(HDU3695)
- 利用Python从文件中读取字符串(解决乱码问题)
- PHP的preg_match匹配字符串长度问题解决方法
- 利用匈牙利算法&Hopcroft-Karp算法解决二分图中的最大二分匹配问题
- 利用触发器和INSERT INTO ...SELECT...解决Oracle 数据匹配问题
- java字符串星号、问号匹配问题解决方法
- java解决“字符串”和“带格式日期数字”之间的匹配问题
- java字符串星号、问号匹配问题解决方法
- 数据结构(C#)--利用动态规划解决0-1背包问题
- 解决java switch……case不能匹配字符串的问题
- Java利用栈解决符号匹配问题