判断一个字符串是否是有其他两个字符串交错构成的(Interleaving String)
来源:互联网 发布:java reader 转string 编辑:程序博客网 时间:2024/04/29 05:01
举个例子:
s1 = “aabcc”,
s2 = “dbbca”,
如果 s3 = “aadbbcbcac”, return true.
如果 s3 = “aadbbbaccc”, return false.
1、动态规划
public boolean isInterleave(String s1,String s2,String s3){ int s1len=s1.length(),s2len=s2.length(),s3len=s3.length(); if(s1len+s2len!=s3len)return false; boolean val[][]=new boolean[s1len+1][s2len+1]; val[0][0]=true; for(int i=1;i<=s1len;i++){ val[i][0]=val[i-1][0]&&s1.charAt(i-1)==s3.charAt(i-1); } for(int i=1;i<=s2len;i++){ val[0][i]=val[0][i-1]&&s2.charAt(i-1)==s3.charAt(i-1); } for(int i=1;i<=s1len;i++){ for(int j=1;j<=s2len;j++){ val[i][j]=(val[i][j-1]&&s2.charAt(j-1)==s3.charAt(i+j-1))|| (val[i-1][j]&&s1.charAt(i-1)==s3.charAt(i+j-1)); } } return val[s1len][s2len]; }
2、递归
public boolean isInterleave(String s1, String s2, String s3) { if (s1.length() + s2.length() != s3.length()) return false; HashSet<Integer> cache = new HashSet<Integer>(); return isInterleave0(s1, s2, s3, 0, 0,cache); } public boolean isInterleave0(String s1, String s2, String s3, int p1, int p2,HashSet<Integer> cache) { if (p1 + p2 == s3.length()) return true; if (cache.contains(p1 * s3.length() + p2)) return false; // no need to store actual result. // if we found the path, we have already terminated. cache.add(p1 * s3.length() + p2); boolean match1 = p1 < s1.length() && s3.charAt(p1 + p2) == s1.charAt(p1); boolean match2 = p2 < s2.length() && s3.charAt(p1 + p2) == s2.charAt(p2); if (match1 && match2) return isInterleave0(s1, s2, s3, p1 + 1, p2,cache) || isInterleave0(s1, s2, s3, p1, p2 + 1,cache); else if (match1) return isInterleave0(s1, s2, s3, p1 + 1, p2,cache); else if (match2) return isInterleave0(s1, s2, s3, p1, p2 + 1,cache); else return false; }
0 0
- 判断一个字符串是否是有其他两个字符串交错构成的(Interleaving String)
- 交错字符串 Interleaving String
- 从零开始学习算法(Java实现)~~~~之字符串篇~~~判断两个字符串是否是颠倒字母顺序构成的
- LeetCode 97: Interleaving String 字符串交错
- 1.4 写一个函数判断两个字符串是否使用相同的字符构成。
- 动态规划——字符串的交错组成(interleaving-string)
- 判断一个字符串是否是一个字符串的旋转字符串
- 判断两个字符串是否是同分异构字符串
- 两个字符串交叉得到的字符串 Interleaving String @LeetCode
- 判断一个字符串的是否是时间
- 写一个函数判断两个字符串是否是变位词
- leetCode 97.Interleaving String (交错字符串) 解题思路和方法
- C++如何判断一个string字符串,是否是数字
- C++如何判断一个string字符串,是否是数字
- leetcode 97. Interleaving String(字符串交错出现) DFS深度优先遍历+DP
- 判断一个字符串是否是对称字符串
- 判断一个字符串是否是另一个字符串的子集
- 判断一个数的二进制是否是0、1交错
- DisplayTag的学习感悟
- hdu - 4281 - Judges' response - dp / 01背包 / mTSP
- sendemail + cygwin
- 文章标题
- 数据库索引碎片的自动重建或重组
- 判断一个字符串是否是有其他两个字符串交错构成的(Interleaving String)
- 【转载】Python中使用正则表达式 详解
- 小崔写的一些东西,拿来用用
- Nginx 403 Forbidden错误的解决方法
- 文章标题
- Jquery 用ajax请求后页面会自动刷新的问题
- SCJP的一些感悟!
- 图解VC++绘制数学曲线
- Java子线程中操作主线程Private级别数据