您的位置:首页 > 其它

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";
}


还得把动态规划相关的整理一下
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: