[各种面试题] 交替字符串


2012 google的题?

如果字符串str3能够由str1str2中的字符按顺序交替形成,那么称str3str1str2的交替字符串。例如str1="abc",str2="def",那么"adbecf", "abcdef", "abdecf", "abcdef", "adefbc"等等都为str1str2的交替字符串。更形式化的,str3的生成算法如下:

str3=""
while str1不为空 or str2不为空:
  把str1或str2的首字符加入到str3,并从str1或str2中删除相应的字符
end

给定str1str2,和str3,判断str3是否为str1str2的交替字符串。


用滚动数组一次写成,还好,只是最后返回的时候忘了 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;
}


你可能感兴趣的:([各种面试题] 交替字符串)