Interleaving String
来源:互联网 发布:程序员显示器推荐2017 编辑:程序博客网 时间:2024/04/29 22:44
1. 2维 DP。
class Solution {public: bool isInterleave(string s1, string s2, string s3) { const int n1 = s1.size(); const int n2 = s2.size(); const int n3 = s3.size(); if(n1 == 0) return s2 == s3; if(n2 == 0) return s1 == s3; if(n3 != n1+n2) return false; vector<vector<bool> > f(n1+1, vector<bool>(n2+1, true)); f[0][0] = true; for(int i=1; i<=n1; i++) f[i][0] = f[i-1][0] && s3[i-1] == s1[i-1]; for(int j=1; j<=n2; j++) f[0][j] = f[0][j-1] && s3[j-1] == s2[j-1]; for(int i=1; i<=n1; i++) { for(int j=1; j<=n2; j++) { f[i][j] = (f[i-1][j] && s1[i-1] == s3[i+j-1]) || (f[i][j-1] && s2[j-1] == s3[i+j-1]); } } return f[n1][n2]; }};
2维DP + 滚动数组。
class Solution {public: bool isInterleave(string s1, string s2, string s3) { const int n1 = s1.size(); const int n2 = s2.size(); const int n3 = s3.size(); if(n1 == 0) return s2 == s3; if(n2 == 0) return s1 == s3; if(n3 != n1+n2) return false; vector<bool> f(n2+1, true); f[0] = true; for(int j=1; j<=n2; j++) f[j] = f[j-1] && s3[j-1] == s2[j-1]; for(int i=1; i<=n1; i++) { f[0] = f[0] && s3[i-1] == s1[i-1]; for(int j=1; j<=n2; j++) { f[j] = (f[j] && s1[i-1] == s3[i+j-1]) || (f[j-1] && s2[j-1] == s3[i+j-1]); } } return f[n2]; }};
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
- 快速测试手机浏览器对HTLM5的详细支持情况
- FragmentPagerAdapter与FragmentStatePagerAdapter区别
- JPA注释参考手册
- 使用Viewpager制作图片阅读器(5)- 增加获取网络图片(附上源码)
- Linux开放8080端口
- Interleaving String
- JVM锁机制volatile/synchronized/lock
- Delphi XE7 Update1 下载破解、带源码和帮助安装序列号
- ubuntu安装vmware tools
- linux socket编程之TCP与UDP .
- 理解Linux文件系统之inode
- Android刮刮乐
- Redis笔记(二)主从复制
- Ubuntu14.04系统使用全指南