2012 google的题?
如果字符串str3能够由str1和str2中的字符按顺序交替形成,那么称str3为str1和str2的交替字符串。例如str1="abc",str2="def",那么"adbecf", "abcdef", "abdecf", "abcdef", "adefbc"等等都为str1和str2的交替字符串。更形式化的,str3的生成算法如下:
str3="" while str1不为空 or str2不为空: 把str1或str2的首字符加入到str3,并从str1或str2中删除相应的字符 end
给定str1, str2,和str3,判断str3是否为str1和str2的交替字符串。
用滚动数组一次写成,还好,只是最后返回的时候忘了 n1&1 了。
bool isInterleaving(string &str1, string &str2, string &str3) {
int n1=str1.length(),n2=str2.length(),n3=str3.length();
if ( n1+n2 !=n3 )
return false;
vector<vector<int> > match(2,vector<int>(n2+1,0));
match[0][0]=1;
for(int i=1;i<=n2;i++)
match[0][i]=match[0][i-1]&&str2[i-1]==str3[i-1]?1:0;
for(int k=1;k<=n1;k++)
{
int i=k&1,i_1=(k+1)&1;
match[i][0]=match[i_1][0]&&str1[k-1]==str3[k-1]?1:0;
for(int j=1;j<=n2;j++)
{
match[i][j]=(match[i_1][j]&&str1[k-1]==str3[k+j-1])
||(match[i][j-1]&&str2[j-1]==str3[k+j-1])?1:0;
}
}
return match[n1&1][n2]==1;
}