Skip to content

Instantly share code, notes, and snippets.

@hyfrey
Created October 6, 2012 13:07
Show Gist options
  • Save hyfrey/3844895 to your computer and use it in GitHub Desktop.
Save hyfrey/3844895 to your computer and use it in GitHub Desktop.
leetcode Interleaving String
class Solution {
public:
bool dfs(const string &s1, int i, const string &s2, int j, const string&s3, int k, vector<vector<int> > &dp) {
if(i == s1.size() && j == s2.size() && k == s3.size()) {
return true;
}
if(i == s1.size()) {
return s2.substr(j) == s3.substr(k);
}
if(j == s2.size()) {
return s1.substr(i) == s3.substr(k);
}
if(dp[i][j] == 1) {
return false;
}
if(s1[i] == s3[k]) {
if(dfs(s1, i+1, s2, j, s3, k+1, dp)) {
return true;
}
}
if(s2[j] == s3[k]) {
if(dfs(s1, i, s2, j+1, s3, k+1, dp)) {
return true;
}
}
dp[i][j] = 1;
return false;
}
bool isInterleave(string s1, string s2, string s3) {
vector<vector<int> > dp(s1.size());
for(int i = 0; i < s1.size(); i++) {
dp[i].assign(s2.size(), 0);
}
if(s1.size() + s2.size() != s3.size()) {
return false;
}
return dfs(s1, 0, s2, 0, s3, 0, dp);
}
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment