From 4504c7cc6a1ec27597e734fca02083b936767225 Mon Sep 17 00:00:00 2001 From: atompi Date: Thu, 30 Mar 2023 09:37:02 +0800 Subject: [PATCH] feat: add Golang solution to lc problems: No. 87 --- .../0000-0099/0087.Scramble String/README.md | 37 +++++++++++++++++++ .../0087.Scramble String/README_EN.md | 37 +++++++++++++++++++ .../0087.Scramble String/Solution.go | 32 ++++++++++++++++ 3 files changed, 106 insertions(+) create mode 100644 solution/0000-0099/0087.Scramble String/Solution.go diff --git a/solution/0000-0099/0087.Scramble String/README.md b/solution/0000-0099/0087.Scramble String/README.md index 389b65a8def7a..bf449b3986099 100644 --- a/solution/0000-0099/0087.Scramble String/README.md +++ b/solution/0000-0099/0087.Scramble String/README.md @@ -149,6 +149,43 @@ class Solution { } ``` +### **Go** + +```go +func isScramble(s1 string, s2 string) bool { + n := len(s1) + dp := make([][][]bool, n+1) + for i := range dp { + dp[i] = make([][]bool, n) + for j := range dp[i] { + dp[i][j] = make([]bool, n+1) + } + } + for i := 0; i < n; i++ { + for j := 0; j < n; j++ { + dp[i][j][1] = s1[i] == s2[j] + } + } + for l := 2; l < n+1; l++ { + for i1 := 0; i1 < n-l+1; i1++ { + for i2 := 0; i2 < n-l+1; i2++ { + for i := 1; i < l; i++ { + if dp[i1][i2][i] && dp[i1+i][i2+i][l-i] { + dp[i1][i2][l] = true + break + } + if dp[i1][i2+l-i][i] && dp[i1+i][i2][l-i] { + dp[i1][i2][l] = true + break + } + } + } + } + } + return dp[0][0][n] +} +``` + ### **...** ``` diff --git a/solution/0000-0099/0087.Scramble String/README_EN.md b/solution/0000-0099/0087.Scramble String/README_EN.md index e0ea809ea9920..32d6455af70e8 100644 --- a/solution/0000-0099/0087.Scramble String/README_EN.md +++ b/solution/0000-0099/0087.Scramble String/README_EN.md @@ -119,6 +119,43 @@ class Solution { } ``` +### **Go** + +```go +func isScramble(s1 string, s2 string) bool { + n := len(s1) + dp := make([][][]bool, n+1) + for i := range dp { + dp[i] = make([][]bool, n) + for j := range dp[i] { + dp[i][j] = make([]bool, n+1) + } + } + for i := 0; i < n; i++ { + for j := 0; j < n; j++ { + dp[i][j][1] = s1[i] == s2[j] + } + } + for l := 2; l < n+1; l++ { + for i1 := 0; i1 < n-l+1; i1++ { + for i2 := 0; i2 < n-l+1; i2++ { + for i := 1; i < l; i++ { + if dp[i1][i2][i] && dp[i1+i][i2+i][l-i] { + dp[i1][i2][l] = true + break + } + if dp[i1][i2+l-i][i] && dp[i1+i][i2][l-i] { + dp[i1][i2][l] = true + break + } + } + } + } + } + return dp[0][0][n] +} +``` + ### **...** ``` diff --git a/solution/0000-0099/0087.Scramble String/Solution.go b/solution/0000-0099/0087.Scramble String/Solution.go new file mode 100644 index 0000000000000..3dc1ecf4aabe5 --- /dev/null +++ b/solution/0000-0099/0087.Scramble String/Solution.go @@ -0,0 +1,32 @@ +func isScramble(s1 string, s2 string) bool { + n := len(s1) + dp := make([][][]bool, n+1) + for i := range dp { + dp[i] = make([][]bool, n) + for j := range dp[i] { + dp[i][j] = make([]bool, n+1) + } + } + for i := 0; i < n; i++ { + for j := 0; j < n; j++ { + dp[i][j][1] = s1[i] == s2[j] + } + } + for l := 2; l < n+1; l++ { + for i1 := 0; i1 < n-l+1; i1++ { + for i2 := 0; i2 < n-l+1; i2++ { + for i := 1; i < l; i++ { + if dp[i1][i2][i] && dp[i1+i][i2+i][l-i] { + dp[i1][i2][l] = true + break + } + if dp[i1][i2+l-i][i] && dp[i1+i][i2][l-i] { + dp[i1][i2][l] = true + break + } + } + } + } + } + return dp[0][0][n] +}