[leetcode]Interleaving String

14 篇文章 0 订阅

Interleaving String

 

Given s1s2s3, 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.

解题思路:动态规划  用二维数组来表示dp[i][j]表示s1[i] s2[j]之前的元素可以有序组合成s3[i + j]

状态转移方程

dp[i][j] = dp[i - 1][j] && s1[i] == s3[i + j]     ||     dp[i][j - 1] && s2[j] == s3[i + j]

class Solution {
public:
    bool isInterleave(string s1, string s2, string s3) {
		size_t n = s1.size();
		size_t m = s2.size();
		size_t nm = s3.size();

		if(m + n != nm) return false;
		//vb[i][j]表示s1[i] s2[j] 之前的元素可以组成s3[i + j]的字符串
        vector<vector<bool> > vb(n + 1, vector<bool> (m + 1, false));

		vb[0][0] = true;
		
		for(size_t k = 1; k <= m; k++){ //s2的元素是列下标
			vb[0][k] = vb[0][k - 1] && s2[k - 1] == s3[k - 1];
		}
		for(size_t k = 1; k <= n; k++){ //s1的元素是行下标
			vb[k][0] = vb[k - 1][0] && s1[k - 1] == s3[k - 1];
		}
		for(size_t i = 1; i <= n; i++){
			for(size_t j = 1; j <= m; j++){
				//s1[i] && s2[j - 1]之前的元素 当前s2[j - 1]与s3比较
				//s1[i -1] && s2[j]
				vb[i][j] = vb[i][j - 1] && s2[j - 1] == s3[i + j - 1] 
				|| vb[i - 1][j] && s1[i - 1] == s3[i + j - 1];
			}
		}

		return vb[n][m];
    }
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值