动态规划-请编写一个高效算法,判断C串是否由A和B交错组成。
来源:互联网 发布:家用路由器 知乎 编辑:程序博客网 时间:2024/05/19 18:16
链接:https://www.nowcoder.com/questionTerminal/138f0ae35154438caf3d0072bd6ffef5
来源:牛客网
来源:牛客网
对于三个字符串A,B,C。我们称C由A和B交错组成当且仅当C包含且仅包含A,B中所有字符,且对应的顺序不改变。请编写一个高效算法,判断C串是否由A和B交错组成。
给定三个字符串A,B和C,及他们的长度。请返回一个bool值,代表C是否由A和B交错组成。保证三个串的长度均小于等于100。
测试样例:
"ABC",3,"12C",3,"A12BCC",6
返回:true
当成一个二维的动态规划问题:例如
class Mixture {public: bool chkMixture(string A, int n, string B, int m, string C, int v) { // write code here int dp[n+1][m+1] ; int i,j ; dp[0][0] = 1 ;//dp[i][j]表示A[0~i-1],B[0~j-1]与C[0~i+j-1]是否交错 for( i=1; i<=n; i++ ) if( A[i-1] == C[ i-1 ] ) dp[i][0] = 1 ; else break ; for( i=1; i<=m; i++ ) if( B[ i-1 ] == C[ i-1 ] ) dp[0][i] = 1 ; else break ; for( i=1; i<=n; i++ ) for( j=1; j<=m; j++ ) if( dp[i-1][j] == 1 && dp[i][j-1]!=1 ) { if( C[i+j-1] == A[ i-1 ] ) dp[i][j] = 1 ; else dp[i][j] = 0 ; } else if( dp[i-1][j] != 1 && dp[i][j-1]==1 ) { if( C[i+j-1] == B[ j-1 ] ) dp[i][j] = 1 ; else dp[i][j] = 0 ; } else if( dp[i-1][j] == 1 && dp[i][j-1] == 1 ) { if( C[i+j-1] == B[ j-1 ] || C[i+j-1] == A[ i-1 ] ) dp[i][j] = 1 ; else dp[i][j] = 0 ; } else//都为0 dp[i][j] = 0 ; return dp[n][m] ; }};class Solution { public: bool dp[101][101]; bool isInterleave(string s1, string s2, string s3) { // Start typing your C/C++ solution below // DO NOT write int main() function int size1 = s1.length(); int size2 = s2.length(); int size3 = s3.length(); if( size1 + size2 != size3) return false; memset(dp, false, sizeof(bool)*101*101); dp[0][0] = true; for(int i = 1; i <= size1; ++i) if(s1[i-1] == s3[i-1]) dp[i][0] = true; else break; for(int j = 1; j <= size2; ++j) if(s2[j-1] == s3[j-1]) dp[0][j] = true; else break; int k; for(int i = 1; i <= size1; ++i) for(int j = 1; j <= size2; ++j) { k = i + j; if(s1[i-1] == s3[k-1]) dp[i][j] = dp[i-1][j] || dp[i][j]; if(s2[j-1] == s3[k-1]) dp[i][j] = dp[i][j-1] || dp[i][j]; } return dp[size1][size2]; } };
阅读全文
0 0
- 动态规划-请编写一个高效算法,判断C串是否由A和B交错组成。
- 判断s3字符串是否由s1和s2交错组成
- 判断数组的每行和每列是否由{a,b,c...z}这26个字符组成
- 动态规划-交错组成
- 请判断A+B是否大于C。
- 三个字符串s1, s2, s3, 现要求你判断s3是否由s1和s2交错组成的
- 判断一个串是否是由重复子串组成
- 判断一个字符串是否由数字组成
- 给定区间[-231, 231]内的3个整数A、B和C,请判断A+B是否大于C。
- 字符串交错组成(动态规划)
- 动态规划解决字符串交错组成问题
- 字符串的交错组成 动态规划
- 给定一个字符串,仅由a,b,c 3种小写字母组成。
- 给定区间[-2的31次方, 2的31次方]内的3个整数A、B和C,请判断A+B是否大于C。
- 给定区间[-2的31次方, 2的31次方]内的3个整数A、B和C,请判断A+B是否大于C。
- 牛客编程1-给定区间[-2^31, 2^31]内的3个整数A、B和C,请判断A+B是否大于C。
- 给定区间[-2^31, 2^31]内的3个整数A、B和C,请判断A+B是否大于C。
- 给定区间[-2的31次方, 2的31次方]内的3个整数A、B和C,请判断A+B是否大于C。
- python字符串换行的三种方式
- Volatile
- WebView常见漏洞
- 使用OkHttp
- IOS的IPV6测试
- 动态规划-请编写一个高效算法,判断C串是否由A和B交错组成。
- HDOJ 1026 Ignatius and the Princess I (BFS+优先队列+记录路径)
- MyBatis增强工具pndao-帮你自动写SQL
- Hadoop全分布集群问题及配置
- java运算符
- Redis 安装
- net_device_ops的ndo_open和ndo_start_xmit函数
- 线段的重叠
- android判断APP是否在前台