生活随笔
收集整理的這篇文章主要介紹了
算法:交错字符串
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目:
給定三個字符串 s1、s2、s3,請你幫忙驗證 s3 是否是由 s1 和 s2 交錯 組成的。
兩個字符串 s 和 t 交錯 的定義與過程如下,其中每個字符串都會被分割成若干 非空 子字符串:
s = s1 + s2 + … + sn
t = t1 + t2 + … + tm
|n - m| <= 1
交錯 是 s1 + t1 + s2 + t2 + s3 + t3 + … 或者 t1 + s1 + t2 + s2 + t3 + s3 + …
提示:a + b 意味著字符串 a 和 b 連接。
func isInterleave(s1 string, s2 string, s3 string) bool {n, m, t := len(s1), len(s2), len(s3)if (n + m) != t {return false}f := make([][]bool, n + 1)for i := 0; i <= n; i++ {f[i] = make([]bool, m + 1)}f[0][0] = truefor i := 0; i <= n; i++ {for j := 0; j <= m; j++ {p := i + j - 1if i > 0 {// == 優先于 &&,f[i][j] 默認是false,如果f[i-1][j]為真,則整個表達式為真f[i][j] = f[i][j] || (f[i-1][j] && s1[i-1] == s3[p])}if j > 0 {f[i][j] = f[i][j] || (f[i][j-1] && s2[j-1] == s3[p])}}}return f[n][m]
}func isInterleave(s1 string, s2 string, s3 string) bool {n, m, t := len(s1), len(s2), len(s3)if (n + m) != t {return false}f := make([]bool, m + 1)f[0] = truefor i := 0; i <= n; i++ {for j := 0; j <= m; j++ {p := i + j - 1if i > 0 {f[j] = f[j] && s1[i-1] == s3[p]}if j > 0 {f[j] = f[j] || f[j-1] && s2[j-1] == s3[p]}}}return f[m]
}
鏈接:https://leetcode-cn.com/problems/interleaving-string/solution/jiao-cuo-zi-fu-chuan-by-leetcode-solution/
總結
以上是生活随笔為你收集整理的算法:交错字符串的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。