lintcode interleaving-string 交叉字符串
来源:互联网 发布:奥登体测数据 编辑:程序博客网 时间:2024/05/31 19:22
问题描述
lintcode
笔记
buff[i][j]表示:
s1的前i个字符和s2的前j个字符是否能交叉组成s3前i+j个字符。
若要buff[i][j] = true,有两种情况。
- s1前i-1个字符与s2前j个字符符合要求,而且s1的i个字符正好是s3的第(i+j)个字符。
- s2前j-1个字符与s1前i个字符符合要求,而且s2的j个字符正好是s3的第(i+j)个字符。
还要做初始化。见代码2的再次练习
代码
class Solution {public: /** * Determine whether s3 is formed by interleaving of s1 and s2. * @param s1, s2, s3: As description. * @return: true of false. */ bool isInterleave(string s1, string s2, string s3) { // write your code here const int len1 = s1.size(); const int len2 = s2.size(); const int len3 = s3.size(); if (len1 + len2 != len3) return false; vector<vector<bool> > dp(len1+1, vector<bool>(len2+1, false)); dp[0][0] = true; for (int i = 1; i <= len1; i++) dp[i][0] = dp[i-1][0] && (s1[i-1] == s3[i-1]); for (int j = 1; j <= len2; j++) dp[0][j] = dp[0][j-1] && (s2[j-1] == s3[j-1]); for (int i = 1; i <= len1; i++) { for (int j = 1; j <= len2; j++) { int t = i + j; if (s3[t-1] == s1[i-1]) dp[i][j] = dp[i][j] || dp[i-1][j]; if (s3[t-1] == s2[j-1]) dp[i][j] = dp[i][j] || dp[i][j-1]; } } return dp[len1][len2]; }};
再次练习
class Solution {public: /** * Determine whether s3 is formed by interleaving of s1 and s2. * @param s1, s2, s3: As description. * @return: true of false. */ bool isInterleave(string s1, string s2, string s3) { // write your code here const int len1 = s1.size(); const int len2 = s2.size(); if (len1 + len2 != s3.size()) return false; bool buff[len1+1][len2+1]; buff[0][0] = true; // 用s1的前0位(空字符串)与s2的前0位(空字符串),可以组成s3的前0位(空字符串) for (int i = 1; i <= len1; i++)// 用s1的前i位,和s2的前0位(空字符串) { buff[i][0] = buff[i-1][0] && s1[i-1]==s3[i-1]; } for (int j = 1; j <= len2; j++)// 用s1的前0位(空字符串),和s2的前j位 { buff[0][j] = buff[0][j-1] && s2[j-1]==s3[j-1]; } for (int i = 1; i <= len1; i++) { for (int j = 1; j <= len2; j++) { buff[i][j] = (buff[i-1][j] && s1[i-1]==s3[i+j-1]) || (buff[i][j-1] && s2[j-1]==s3[i+j-1]); // cout << i << ' ' << j << ' ' << buff[i][j] << endl; } } return buff[len1][len2]; }};
0 0
- lintcode interleaving-string 交叉字符串
- [Lintcode] Interleaving String 交叉字符串
- Interleaving String 交叉的字符串
- Interleaving String(交叉字符串)
- [LeetCode] Interleaving String 交叉字符串
- LeetCode | Interleaving String(交叉字符串)
- lintcode: Interleaving String
- Interleaving String--lintcode
- 两个字符串交叉得到的字符串 Interleaving String @LeetCode
- 29.Interleaving String-交叉字符串(中等题)
- 交错字符串 Interleaving String
- LintCode-交叉字符串
- LintCode(M)交叉字符串
- LintCode 29-交叉字符串
- LintCode 29 交叉字符串
- LintCode 交叉字符串
- lintcode -- 交叉字符串
- LintCode 交叉字符串
- Linux 用户管理之相关命令
- 如何编写递归程序(回溯法)
- [leetcode] 299. Bulls and Cows
- 格式化分隔手机号码
- php调用接口
- lintcode interleaving-string 交叉字符串
- Python----压缩与解压缩文件
- java文件的创建与删除
- 《Java源码分析》:WeakHashMap
- 一些记录
- Codevs 2597 团伙(并查集)
- CV相关的企业
- eclipse导出的jar包不能运行
- 关键字