给出三个字符串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]
}
该博客探讨了一种算法,用于判断给定的两个字符串s1和s2是否能通过交织方式形成第三个字符串s3。文章提供了Go语言的实现代码,通过对s1、s2和s3的字符进行逐个比较,构建了一个状态转移矩阵来判断交织可能性。最终返回布尔值表示s3是否可以通过s1和s2交织得到。
518

被折叠的 条评论
为什么被折叠?



