leetcode@ [72/115] Edit Distance & Distinct Subsequences (Dynamic Programming)
https://leetcode.com/problems/edit-distance/
Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.)
You have the following 3 operations permitted on a word:
a) Insert a character
b) Delete a character
c) Replace a character
用dp[i][j] 来表示 长度为 i 的 word1 经过 dp[i][j]次变换 可以得到长度为 j 的word2,那么我们主要考察两种情况,第一种是:word1[i] == word2[j],那么这个问题的规模便转换成了:dp[i][j] = dp[i-1][j-1]. 第二种情况是:word1[i] != word2[j],那么我们可以删除掉word1中的第 i 个字符,或者我们可以把 word1中的第 i 个字符换成与 word2[j] 相同的字符,或者我们还可以同时 删除 word1[i] 和 word2[j]. 于是状态转移方程为:dp[i][j] = min(dp[i-1][j-1], dp[i-1][j], dp[i][j-1]) + 1.
class Solution {
public:
int minDistance(string word1, string word2) {
int m = word1.length(), n = word2.length();
vector<vector<int> > dp(m+, vector<int> (n+, ));
for(int i=;i<=m;++i) dp[i][] = i;
for(int j=;j<=n;++j) dp[][j] = j;
for(int i=;i<=m;++i) {
for(int j=;j<=n;++j) {
if(word1[i-] == word2[j-]) {
dp[i][j] = min(dp[i-][j-], dp[i-][j]+);
}
else {
dp[i][j] = min(dp[i-][j], min(dp[i][j-], dp[i-][j-])) + ;
}
}
}
return dp[m][n];
}
};
https://leetcode.com/problems/distinct-subsequences/
Given a string S and a string T, count the number of distinct subsequences of T in S.
A subsequence of a string is a new string which is formed from the original string by deleting some (can be none) of the characters without disturbing the relative positions of the remaining characters. (ie, "ACE" is a subsequence of "ABCDE" while "AEC" is not).
Here is an example:
S = "rabbbit", T = "rabbit"
Return 3.
解题报告:用 dp[i][[j] 来表示长度为 i 的 S串 包含了几个 T串。分两种情况考虑,第一种:S[i] != T[j],那么问题转而变成求S[1,...i-1] 包含了几个 T[1...i]。因为S[i] 对解的个数不会产生影响。第二种: S[i] == T[j],那么一种可能是 S[1...i-1] 包含了 若干个 T[1...j-1],或者是S[1...i-1] 包含了 若干个T[1...j]。所以状态转移方程为:
dp[i][j] = dp[i-1][j] + dp[i-1][j-1] (if S[i] == T[j])
dp[i][j] = dp[i-1][j] (if S[i] != T[j])
class Solution {
public:
int numDistinct(string s, string t) {
int m = s.length(), n = t.length();
vector<vector<int> > dp(m+, vector<int>(n+, ));
for(int i=;i<=m;++i) dp[i][] = ;
for(int i=;i<=m;++i) {
for(int j=;j<=n;++j) {
if(s[i-] == t[j-]) dp[i][j] = dp[i-][j-] + dp[i-][j];
else dp[i][j] = dp[i-][j];
}
}
return dp[m][n];
}
};
leetcode@ [72/115] Edit Distance & Distinct Subsequences (Dynamic Programming)的更多相关文章
- (LeetCode 72)Edit Distance
Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2 ...
- [Leetcode 72]编辑距离 Edit Distance
[题目] Given two words word1 and word2, find the minimum number of operations required to convert word ...
- LeetCode(72) Edit Distance
题目 Given two words word1 and word2, find the minimum number of steps required to convert word1 to wo ...
- [leetcode]161. One Edit Distance编辑步数为一
Given two strings s and t, determine if they are both one edit distance apart. Note: There are 3 pos ...
- [LeetCode] 161. One Edit Distance 一个编辑距离
Given two strings s and t, determine if they are both one edit distance apart. Note: There are 3 pos ...
- ✡ leetcode 161. One Edit Distance 判断两个字符串是否是一步变换 --------- java
Given two strings S and T, determine if they are both one edit distance apart. 给定两个字符串,判断他们是否是一步变换得到 ...
- [LeetCode#161] One Edit Distance
Problem: Given two strings S and T, determine if they are both one edit distance apart. General Anal ...
- 【leetcode刷题笔记】Distinct Subsequences
Given a string S and a string T, count the number of distinct subsequences of T in S. A subsequence ...
- [LeetCode] 45. Jump Game II_ Hard tag: Dynamic Programming
Given an array of non-negative integers, you are initially positioned at the first index of the arra ...
随机推荐
- 详细解析: VictorOps 是如何利用和完善 ChatOps?
ChatOps,即聊天应用,在软件开发中被广泛应用改进开发者之间的沟通.简单地说,ChatOps 是将内容或行动 (或两者) 迁移到聊天客户端.这样做之后,企业内的所有团队都能分享重要信息,行动,及其 ...
- 深入剖析Classloader(二)--根类加载器,扩展类加载器与系统类加载器
原文地址:http://yhjhappy234.blog.163.com/blog/static/31632832201152555245584/?suggestedreading&wumii ...
- highcharts 切换
<!doctype html> <html lang="en"> <head> <script type="text/javas ...
- java 用JNA方法调用C++动态链接库
JNA(Java Native Access)框架是一个开源的Java框架,是SUN公司主导开发的,建立在经典的JNI的基础之上的一个框架.非常强大.易用,功能上类似与.NET的P/Invoke.你只 ...
- Apache James搭建内网邮件服务器
Apache James搭建内网邮件服务器 极客521 | 极客521 2014-08-21 148 阅读 java 大概之前两个礼拜的日子,讨论会介绍了关于了.net内网邮件服务器的搭建.所以自己也 ...
- P90、面试题11:数值的整数次方
题目:实现函数double Power(double base, int exponent),求base的exponent次方.不得使用库函数,同时不需要考虑大数问题. 需要注意的地方: 1)输入的指 ...
- Windbg:如何给字符串下条件断点
因为Windgb支持MASM语法,字符串的比较方法有$scmp和$sicmp.用法和c中的字符串比较方法一致.在需要比较字符串成员变量的时候,遇到了点问题.因为字符串成员变量无法直接获取字符串内容.p ...
- dom4j 的小小测试
@Test public void gogo() throws IOException{ InputStream in = this.getClass().getClassLoader() .getR ...
- 去除html标签 正则 <.+?> 解释
http://baike.baidu.com/link?url=2zORJF9GOjU8AkmuHDLz9cyl9yiL68PdW3frayzLwWQhDvDEM51V_CcY_g1mZ7OPdcq8 ...
- extends:类似于java中的继承特征,extends="struts-default"
extends:类似于java中的继承特征,extends="struts-default"就是继承struts-default.xml,它里面定义了许多跳转类型.拦截器等一些常用 ...