您的位置:首页 > 编程语言 > Java开发

[leetcode]97. Interleaving String(Java)

2017-07-13 10:15 441 查看
https://leetcode.com/problems/interleaving-string/#/description

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.

package go.jacob.day713;

/**
*
* 97. Interleaving String
*
* @author Jacob
*
*/
public class Demo1 {
public boolean isInterleave(String s1, String s2, String s3) {
if (s1.length() + s2.length() != s3.length())
return false;
boolean[][] res = new boolean[s1.length() + 1][s2.length() + 1];
res[0][0] = true;
for (int i = 0; i < s1.length(); i++) {
res[i + 1][0] = res[i][0] && s1.charAt(i) == s3.charAt(i);
}

for (int i = 0; i < s2.length(); i++) {
res[0][i + 1] = res[0][i] && s2.charAt(i) == s3.charAt(i);
}
for (int i = 0; i < s1.length(); i++) {
for (int j = 0; j < s2.length(); j++) {
res[i + 1][j + 1] = (res[i][j + 1] && s1.charAt(i) == s3.charAt(i + j + 1))
|| (res[i + 1][j] && s2.charAt(j) == s3.charAt(i + j + 1));
}
}

return res[s1.length()][s2.length()];
}

/*
* 自己天真的解法 必须要用动态规划解
*/
public boolean isInterleave_1(String s1, String s2, String s3) {
if (s1.length() + s2.length() != s3.length())
return false;
int len = s3.length();
int m = 0, n = 0;
for (int i = 0; i < len; i++) {
if (m < s1.length() && s1.charAt(m) == s3.charAt(i))
m++;
else if (n < s2.length() && s2.charAt(n) == s3.charAt(i))
n++;
else
return false;
}
return true;
}
}


4000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: