给出三个字符串s1, s2, s3,判断s3是否可以由s1和s2交织而成。
例如:
给定
s1 ="xxyzz",
s2 ="pyyzx",
如果s3 ="xxpyyzyzxz", 返回true
如果s3 ="xxpyyyxzzz", 返回false
思路:记录i个s1和j个s2是否可以组成i+j个s3,就是判断s1的第i个字符是否等于s3第i+j+1个字符并且i-1个s1和j个s2可以构成i+j-1个s3,或者是s2的第j个字符是否等于s3第i+j+1个字符并且i个s1和j-1个s2可以构成i+j-1个s3。最后返回最后的状态
package main
/**
*
* @param s1 string字符串
* @param s2 string字符串
* @param s3 string字符串
* @return bool布尔型
*/
func isInterleave( s1 string , s2 string , s3 string ) bool {
// write code here
if len(s1)+len(s2) != len(s3) {
return false
}
S := make(map[int]map[int]bool)
S[0] = make(map[int]bool)
S[0][0] = true
num1 := len(s1)
num2 := len(s2)
for j := 0; j < num1; j++ {
if s3[j] == s1[j] {
S[0][j+1] = S[0][j]
} else {
S[0][j+1] = false
}
}
for i := 0; i < num2; i++ {
S[i+1] = make(map[int]bool)
if s3[i] == s2[i] {
S[i+1][0] = S[i][0]
} else {
S[i+1][0] = false
}
}
for i := 0; i < num2; i++ {
for j := 0; j < num1; j++ {
S[i+1][j+1] = ((s3[i+j+1] == s1[j]) && S[i+1][j]) || ((s3[i+j+1] == s2[i]) && S[i][j+1])
}
}
return S[num2][num1]
}