博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(算法)交错的字符串
阅读量:6319 次
发布时间:2019-06-22

本文共 1430 字,大约阅读时间需要 4 分钟。

题目:

给定三个字符串A, B, C,判断C是否由A和B交错构成。交错构成的意思是,对于字符串C,可以将其每个字符标记为A类或B类,使得我A类的每个字符顺序构成了A字符串,B类的每个字符顺序构成了B字符串。如:对于A=”rabbit” B=”mq”, ”rabmbitq”是由A和B交错构成的,但”rabbqbitm”不是由A和B交错构成。

思路:

【动态规划】

假设dp[i][j]表示A的前i个字符和B的前j个字符是否能够交错构成C的前i+j个字符。

状态转移方程:

dp[i][j]=(dp[i-1][j] && A[i-1]==C[i+j-1]) || (dp[i][j-1] && B[j-1]==C[i+j-1])

含义:

dp[i][j]取决于:

1、A的前i-1个字符和B的前j个字符交错构成C的前i+j-1个字符,且A[i-1]==C[i+j-1]

2、A的前i个字符和B的前j-1个字符交错构成C的前i+j-1个字符,且B[j-1]==C[i+j-1]

初始状态:

dp[0][0]=0;

dp[i][0]=dp[i-1][0] && A[i-1]=C[i-1];   (1=<i<=m)

dp[0][j]=dp[0][j-1] && B[j-1]=C[j-1];  (1=<j<=n)

代码:

#include 
#include
using namespace std;bool IsCrossString(const string &c,const string &a,const string &b){ int len_c=c.size(); int len_a=a.size(); int len_b=b.size(); if(len_c!=len_a+len_b){ cout<<"Error"<
> dp(len_a+1,vector
(len_b+1)); dp[0][0]=true; for(int i=1;i<=len_a;i++) dp[i][0]=dp[i-1][0] && (c[i-1]==a[i-1]); for(int i=1;i<=len_b;i++) dp[0][i]=dp[0][i-1] && (c[i-1]==b[i-1]); for(int i=1;i<=len_a;i++){ for(int j=1;j<=len_b;j++){ dp[i][j]=(dp[i-1][j] && (a[i-1]==c[i+j-1])) || (dp[i][j-1] && (b[j-1]==c[i+j-1])); } }/* for(int i=0;i<=len_a;i++){ for(int j=0;j<=len_b;j++){ cout<< dp[i][j] <<" "; } cout<
>a>>b>>c){ cout<< IsCrossString(c,a,b) << endl; } return 0;}

 

转载地址:http://dxxxa.baihongyu.com/

你可能感兴趣的文章
Flutter 布局(四)- Baseline、FractionallySizedBox、IntrinsicHeight、IntrinsicWidth详解
查看>>
Guava Cache
查看>>
翻译连载 | JavaScript 轻量级函数式编程-第1章:为什么使用函数式编程?|《你不知道的JS》姊妹篇 ...
查看>>
如果在swift的extension中override方法,你就会发现这有点难办
查看>>
Spring中的事件驱动模型(二)
查看>>
移动商城第十五篇【单品查询】
查看>>
机器学习在电商应用中的三个境界:爆款模型、转化率模型及个性化模型
查看>>
let与var的区别
查看>>
从架构演进的角度聊聊Spring Cloud做了些什么
查看>>
解释器模式
查看>>
2018 前端性能优化清单 - 第 3 部分
查看>>
20181211 - es6(Array && Object && class继承剖析 && generator和iterator原理)
查看>>
webpack + Vue + Hbuilder 打包成App,混合app开发,一个人搞定
查看>>
深入理解Plasma(四)Plasma Cash
查看>>
Glide 系列-3:Glide 缓存的实现原理(4.8.0)
查看>>
搜狐新闻APP是如何使用HUAWEI DevEco IDE快速集成HUAWEI HiAI Engine
查看>>
模拟病毒扫描程序(Executors、ScheduledExecutorService类)
查看>>
阿里巴巴1682亿背后的“企业级”高效持续交付
查看>>
聊聊HystrixConcurrencyStrategy
查看>>
Flutter之WidgetsApp使用详解&与MaterialApp的纠缠
查看>>