Interleaving String
来源:互联网 发布:黑客大会 知乎 编辑:程序博客网 时间:2024/06/06 01:26
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[i j] 表示s1[0 - i]是否与s2[0 - j]是交叉串。
- 则空串与空串为true,即dp[0][0] = 1;
- dp[i][j] = (dp[i][j - 1] && s2[j - 1] == s3[i + j - 1]) || (dp[i - 1][j] && s1[i - 1] == s3[i + j - 1]);
dp[i][j]为真时,肯定是s1[0,i]与s2[0-j]交叉组成 串s3 的 [0 ,i + j -1],s3[i + j - 1] = s1[i] OR s2[j],
则 当s3[i + j - 1] == s1[i] && dp[i][j - 1] && s2[j - 1] 或者dp[i - 1][j] && s1[i - 1] == s3[i + j - 1]);时为真
- 这里要注意当i 或者j 为0时 i-1 (j - 1)越界的问题!
- 对于两个数组i,j关系的问题,考虑局部0-i 和0-j,最后以dp公式,得出0-i 与0-j的关系即可!
class Solution {public: bool isInterleave(string s1, string s2, string s3) {int len1 = s1.size();int len2 = s2.size();int len3 = s3.size();//长度不相等,falseif(len1 + len2 != len3)return false;vector<vector<int> >dp;vector<int>v;for(int i = 0; i <= len1; i++){v.clear();for(int j = 0; j <= len2; j++)v.push_back(0);dp.push_back(v);}//在对字符串,数组固定取值时,先判断下标是否越界if(len1 && s1[0] == s3[0])dp[1][0] = 1;if(len2 && s2[0] == s3[0])dp[0][1] = 1; dp[0][0] = 1;for(int i = 0; i <= len1; i++){for(int j = 0; j <= len2; j++){//对于可能越界的直接用if 省事if(!i && j)//i = 0时只需考虑dp[i][j - 1] 、s2[j - 1]dp[i][j] = dp[i][j - 1] && s2[j - 1] == s3[i + j - 1];else if(i && !j)//i = 0时只需考虑dp[i - 1][j] 、s2[i - 1],即dp[0][i]是否是交叉串dp[i][j] = dp[i - 1][j] && s1[i - 1] == s3[i + j - 1];else if(i && j)dp[i][j] = (dp[i][j - 1] && s2[j - 1] == s3[i + j - 1]) || (dp[i - 1][j] && s1[i - 1] == s3[i + j - 1]);}}return dp[len1][len2]; }};
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
- 关于 Java 数组的 12 个最佳方法
- 在 Visual Basic 中读取二进制文件
- [ACM] HDU 4885 TIANKENG’s travel (特殊建图,最短路)
- 互有新媒体交互平台——新媒体交互解决新方案
- hdu 2052 Picture (模拟)
- Interleaving String
- 深入理解java异常处理机制
- 比较排序算法
- iOS-应用之间调用
- Android LayoutInflater原理分析,带你一步步深入了解View(一)
- leetcode6 Zigzag Conversion
- Java中的equals与==之比较
- iOS-BugList:NSNull equal
- Sicily1828Minimal