leetcode interleaving string

class Solution{
public:
	bool interLeave(string s1,int len1,string s2,int len2,string s3,int len3){
		bool flag=false;
		if(len3==0){
			if(len1==0&&len2==0)
				return true;
			else
				return false;
		}
		if(len3>=1&&len1>=1&&s3[len3-1]==s1[len1-1]){
			flag=flag||interLeave(s1,len1-1,s2,len2,s3,len3-1);
		}
		if(len3>=1&&len2>=1&&s3[len3-1]==s2[len2-1]){
			flag=flag||interLeave(s1,len1,s2,len2-1,s3,len3-1);
		}
		return flag;
	}
	bool isInterleave(string s1, string s2, string s3){
		int len1=s1.length();
		int len2=s2.length();
		int len3=s3.length();
		if(len3!=(len1+len2))
			return false;
		//cout<<interLeave("ab",2,"aa",2,"abaa",4);
		return interLeave(s1,len1,s2,len2,s3,len3);

	}
};

初始想法,删除其中一个字符串,看剩下的是否是字符串2。遇到分支时,无法判断该删哪个,需要回溯,因此递归,二维动态规划。

参考文章:http://blog.unieagle.net/2012/09/29/leetcode%E9%A2%98%E7%9B%AE%EF%BC%9Ainterleaving-string%EF%BC%8C%E4%BA%8C%E7%BB%B4%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值