Interleaving String(DP应用)
2014-05-25 18:02
225 查看
Interleaving String
Given s1, s2, s3, find whether s3 is formed by the interleaving of s1 and s2.For example,
Given:
s1 = "aabcc",
s2 = "dbbca",
When s3 = "aadbbcbcac", return true.
When s3 = "aadbbbaccc", return false.
#include #include #include using namespace std; /* 如果要记录轨迹,则一般用三维数据,这里我用了2维数据, 0:initialized value, 1:left, 2:up, 4:no path; 则当是1 2 3(两个都可以) 时才是可行的。 */ bool isInterleave(string s1, string s2, string s3) { //preprocessing if(s1.size() + s2.size() != s3.size()) return false; if(s1.size() == 0){ if(s2 == s3) return true; else return false; } if(s2.size() == 0){ if(s1 == s3) return true; else return false; } //end preprocessing int flag[s1.size()+1][s2.size()+1]; for(int i = 0; i <= s1.size(); i++){ for(int j = 0; j <= s2.size(); j++){ flag[i][j] = 0; } } bool eq = true; for(int i = 0; i < s1.size(); ++i){ if(eq == true && s1[i] == s3[i]){ flag[i+1][0] = 2; } else{ flag[i+1][0] = 4; eq = false; } } eq = true; for(int j = 0; j < s2.size(); ++j){ if(eq == true && s2[j] == s3[j]){ flag[0][j+1] = 1; } else{ flag[0][j+1] = 4; eq = false; } } for(int i = 0; i < s1.size(); i++){ for(int j = 0; j < s2.size(); j++){ //flag[i+1][j+1] = ((s1[i] == s3[i+j+1]) && (flag[i][j+1] == true)) || ((s2[j] == s3[i+j+1]) && (flag[i+1][j] == true)); if(s1[i] == s3[i+j+1] && flag[i][j+1] != 4){ if(flag[i+1][j+1] == 4) flag[i+1][j+1] = 2; else flag[i+1][j+1] += 2; }else if(flag[i+1][j+1] == 0) flag[i+1][j+1] = 4; if(s2[j] == s3[i+j+1] && flag[i+1][j] != 4){ if(flag[i+1][j+1] == 4) flag[i+1][j+1] = 1; else flag[i+1][j+1] += 1; }else if(flag[i+1][j+1] == 0) flag[i+1][j+1] = 4; } } for(int i = 0; i <= s1.size(); i++){ for(int j = 0; j <= s2.size(); j++){ cout << flag[i][j] << "\t"; } cout << endl; } return (flag[s1.size()][s2.size()] != 4); } int main(){ string s1("aabcc"); string s2("dbbca"); string s3("aadbbcbcac"); if(isInterleave(s1, s2, s3)) cout << "yes" << endl; else cout << "false"; }
还得把动态规划相关的整理一下
相关文章推荐
- Leetcode dp Interleaving String
- 97. Interleaving String (String; DP)
- Interleaving String [leetcode] DP
- [LeetCode.DP]Interleaving String
- 97. Interleaving String(dp)
- 【DP】Interleaving String
- LeetCode Interleaving String DP
- leetcode 97. Interleaving String(字符串交错出现) DFS深度优先遍历 + 很明显很经典的DP动态规划做法
- LeetCode-97-Interleaving String DP 记忆化搜索
- Interleaving String——是否由两个string交叉、DP
- leetcode -- Interleaving String -- 2D dp经典
- Posts Tagged 【dp】Interleaving String
- [LeetCode] Interleaving String(dp)
- [leetcode] Interleaving String@DP
- Leetcode: Interleaving String
- LeetCode:Interleaving String
- LeetCode_Interleaving String
- Interleaving String
- Leetcode: Interleaving String
- leetcode: Interleaving String