交替字符串

输入三个字符串s1、s2和s3,判断第三个字符串s3是否由前两个字符串s1和s2交错而成,即不改变s1和s2中各个字符原有的相对顺序,例如当s1 = “aabcc”,s2 = “dbbca”,s3 = “aadbbcbcac”时,则输出true,但如果s3=“accabdbbca”,则输出false。

#define N 100

bool isInterLeave(string a, string b, string mixedStr) {
	int alen = a.length();
	int blen = b.length();
	int mixlen = mixedStr.length();

	if (alen + blen != mixlen) {
		return false;
	}

	bool dp[N][N];
	memset(dp, false, sizeof(bool) * N * N);

	//空串可以合成空串
	dp[0][0] = true;

	for (int i = 0; i <= alen; ++i) {
		for (int j = 0; j <= blen; ++j) {
			if (dp[i][j]
					|| (i - 1 >= 0 && dp[i - 1][j]
							&& a[i - 1] == mixedStr[i + j - 1])
					|| (j - 1 >= 0 && dp[i][j - 1]
							&& b[j - 1] == mixedStr[i + j - 1])) {
				dp[i][j] = true;
			} else {
				dp[i][j] = false;
			}
		}
	}
	return dp[alen][blen];
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值