您的位置:首页 > 其它

LeetCode: Interleaving String

2013-04-01 14:53 465 查看
第一次dfs, 没过large, 马上想到dp, 一次过了

class Solution {
public:
bool isInterleave(string s1, string s2, string s3) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if (s3.size() != s1.size()+s2.size()) return false;
int m = s1.size();
int n = s2.size();
vector<vector<bool>> f(m+1, vector<bool>(n+1));
f[0][0] = true;
for (int i = 1; i <= m; i++) {
f[i][0] = s1[i-1] == s3[i-1]? f[i-1][0]:false;
}
for (int i = 1; i <= n; i++) {
f[0][i] = s2[i-1] == s3[i-1]? f[0][i-1]:false;
}
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
f[i][j] = (f[i-1][j] && s1[i-1] == s3[i+j-1]) || (f[i][j-1] && s2[j-1] == s3[i+j-1]);
}
}
return f[m]
;
}
};


C#

public class Solution {
public bool IsInterleave(string s1, string s2, string s3) {
if (s3.Length != s1.Length + s2.Length) return false;
bool[,] f = new bool[s1.Length+1, s2.Length+1];
f[0, 0] = true;
for (int i = 1; i <= s1.Length; i++) {
f[i, 0] = s1[i-1] == s3[i-1]? f[i-1, 0] : false;
}
for (int i = 1; i <= s2.Length; i++) {
f[0, i] = s2[i-1] == s3[i-1]? f[0, i-1] : false;
}
for (int i = 1; i <= s1.Length; i++) {
for (int j = 1; j <= s2.Length; j++) {
f[i, j] = (f[i-1, j] && s1[i-1] == s3[i+j-1]) || (f[i, j-1] && s2[j-1] == s3[i+j-1]);
}
}
return f[s1.Length, s2.Length];
}
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: