Interleaving String
来源:互联网 发布:柏拉图软件好玩吗 编辑:程序博客网 时间:2024/05/02 07:47
Given s1, s2, s3, 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,f(i,j)表示s1的前i个字符,s2的前j个字符是否能组成目标字符串的前i+j个字符
方便coding,f(i,j)的下标从1开始计数
即f(1,0)表示s1的第一个字符组成的字符串
f(0,1)表示s2的第一个字符组成的字符串
if s1[i]==s3[i+j] , f(i,j) = f(i-1,j)
if s2[j]==s3[i+j] , f(i,j) = f(i,j-1)
最终返回f(m,n) 其中m代表字符串s1的长度,n代表字符串s2的长度。
class Solution {public: bool isInterleave(string s1, string s2, string s3) { if(s1.length()+s2.length()!=s3.length()) return false; int len1 = s1.length(); int len2 = s2.length(); int len3 = s3.length(); if(len1==0) return s2==s3; if(len2==0) return s1==s3; bool **f = new bool*[len1+1]; for(int i=0;i<=len1;i++){ f[i] = new bool[len2+1]; for(int j=0;j<=len2;j++) f[i][j] = false; } if(s1[0]==s3[0]) f[1][0] = true; if(s2[0]==s3[0]) f[0][1] = true; if(!f[0][1] && !f[1][0]) return false; for(int i=0;i<=len1;i++){ for(int j = 0;j<=len2;j++){ if(i==0 && j==0) continue; else{ if(i>0){ if(s3[i+j-1]==s1[i-1] && f[i-1][j]) f[i][j] = true; } if(j>0){ if(s3[i+j-1]==s2[j-1] && f[i][j-1]) f[i][j] = true; } } } } return f[len1][len2]; }};
ac
0 0
- Interleaving String
- Interleaving String
- Interleaving String
- Interleaving String
- Interleaving String
- Interleaving String
- Interleaving String
- Interleaving String
- Interleaving String
- Interleaving String
- Interleaving String
- Interleaving String
- Interleaving String
- Interleaving String
- Interleaving String
- Interleaving String
- Interleaving String
- Interleaving String
- spark-0.8.1安装——基础环境
- C++之构造函数、析构函数抛出异常的问题
- 完美解决鼠标单击变双击问题^_^
- 可复用的链栈
- JavaScript获取页面宽度高度及屏幕分辨率
- Interleaving String
- 方法重载
- 树莓派变身Aria2下载服务器
- 第7章 Android图形与图像处理
- Win8环境下开启Telnet功能及配置
- Cracking the coding interview--Q3.5
- openjudge 计算概论 字符串 3:过滤多余的空格
- linux 下通过ssh传输文件
- MRIdata initial