LeetCode(97) Interleaving String
2015-12-26 13:57
453 查看
题目
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.
分析
题目给定三个字符串s1 , s2 , s3,要求判定字符串s3是否由s1 和s2组合而成。(每个字符串中的字母相对顺序不可变)开始看到题目,没有解决思路。参考网友的答案,发现解决题目的两种思路。
方法一:递归的思路,但是该方法对于大集合数据会出现TLE
方法二:动态规划的思路
根据字符串1和2,建立判定二维矩阵。
AC代码
class Solution { public: /*方法一:递归实现,对大数据组会TLE*/ bool isInterleave1(string s1, string s2, string s3) { int len1 = s1.length(), len2 = s2.length(), len3 = s3.length(); if (len2 == 0) return s1 == s3; else if (len1 == 0) return s2 == s3; else if (len3 == 0) return len1 + len2 == 0; else { if (s1[0] == s3[0] && s2[0] != s3[0]) return isInterleave1(s1.substr(1), s2, s3.substr(1)); else if (s1[0] != s3[0] && s2[0] == s3[0]) return isInterleave1(s1, s2.substr(1), s3.substr(1)); else if (s1[0] == s3[0] && s2[0] == s3[0]) return isInterleave1(s1.substr(1), s2, s3.substr(1)) || isInterleave(s1, s2.substr(1), s3.substr(1)); else return false; }//else } /*方法二:二维动态规划*/ bool isInterleave(string s1, string s2, string s3) { int len1 = s1.length(), len2 = s2.length(), len3 = s3.length(); if (len1 + len2 != len3) return false; else if (len2 == 0) return s1 == s3; else if (len1 == 0) return s2 == s3; else if (len3 == 0) return len1 + len2 == 0; else { vector<vector<int>> dp(len1 + 1, vector<int>(len2 + 1, 0)); dp[0][0] = 1; for (int i = 1; i <= len1; ++i) { if (s1[i - 1] == s3[i - 1]) dp[i][0] = 1; else break; }//for for (int j = 1; j <= len2; ++j) { if (s2[j - 1] == s3[j - 1]) dp[0][j] = 1; else break; }//for for (int i = 1; i <= len1; ++i) { for (int j = 1; j <= len2; ++j) { if (s1[i - 1] == s3[i + j - 1]) dp[i][j] = dp[i - 1][j] || dp[i][j]; if (s2[j - 1] == s3[i + j - 1]) dp[i][j] = dp[i][j - 1] || dp[i][j]; }//for }//for return dp[len1][len2] == 1; }//else } };
GitHub测试程序源码
相关文章推荐
- 无法连接 postgres 服务器数据库
- LeetCode(97) Interleaving String
- SIFT教程:a tutorial on SIFT
- 自定义dialog并设置margin
- 查询表结构信息
- Leetcode: Find the Duplicate Number
- 构建根文件系统启动(1)
- Android 开发中怎么使用自定义字体?
- C++类内存分布
- layoutSubviews
- 关于阅读软件工程和计算机科学技术区别的文章来谈谈自己看法
- po
- .其它命令(help):
- equals,hashCode 方法 的重新理解
- ping www.baidu.com和ping 8.8.8.8出现ping不通
- Linux下Tomcat的安装配置
- nginx 配置优化详解
- Spring系列: 使用aop报错:nested exception is java.lang.NoClassDefFoundError: org/aspectj/weaver/reflect/ReflectionWorld$Refle
- 大型网站架构的演变
- Android五种存储方式