国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

LeetCode - #87 擾亂字符串

這篇具有很好參考價值的文章主要介紹了LeetCode - #87 擾亂字符串。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

LeetCode - #87 擾亂字符串,# LeetCode,leetcode,算法,職場和發(fā)展,原力計劃

LeetCode - #87 擾亂字符串,# LeetCode,leetcode,算法,職場和發(fā)展,原力計劃

前言

本題由于沒有合適答案為以往遺留問題,最近有時間將以往遺留問題一一完善。

我們社區(qū)陸續(xù)會將顧毅(Netflix 增長黑客,《iOS 面試之道》作者,ACE 職業(yè)健身教練。)的 Swift 算法題題解整理為文字版以方便大家學習與閱讀。

LeetCode 算法到目前我們已經更新到 86 期,我們會保持更新時間和進度(周一、周三、周五早上 9:00 發(fā)布),每期的內容不多,我們希望大家可以在上班路上閱讀,長久積累會有很大提升。

不積跬步,無以至千里;不積小流,無以成江海,Swift社區(qū) 伴你前行。如果大家有建議和意見歡迎在文末留言,我們會盡力滿足大家的需求。

難度水平:困難

1. 描述

使用下面描述的算法可以擾亂字符串 s 得到字符串 t

  1. 如果字符串的長度為 1 ,算法停止
  2. 如果字符串的長度 > 1 ,執(zhí)行下述步驟:
    • 在一個隨機下標處將字符串分割成兩個非空的子字符串。即,如果已知字符串 s ,則可以將其分成兩個子字符串 xy ,且滿足 s = x + y
    • 隨機 決定是要「交換兩個子字符串」還是要「保持這兩個子字符串的順序不變」。即,在執(zhí)行這一步驟之后,s 可能是 s = x + y 或者 s = y + x 。
    • xy 這兩個子字符串上繼續(xù)從步驟 1 開始遞歸執(zhí)行此算法。

給你兩個 長度相等 的字符串 s1s2,判斷 s2 是否是 s1 的擾亂字符串。如果是,返回 true ;否則,返回 false 。

2. 示例

示例 1

輸入:s1 = "great", s2 = "rgeat"
輸出:true
解釋:s1 上可能發(fā)生的一種情形是:
"great" --> "gr/eat" // 在一個隨機下標處分割得到兩個子字符串
"gr/eat" --> "gr/eat" // 隨機決定:「保持這兩個子字符串的順序不變」
"gr/eat" --> "g/r / e/at" // 在子字符串上遞歸執(zhí)行此算法。兩個子字符串分別在隨機下標處進行一輪分割
"g/r / e/at" --> "r/g / e/at" // 隨機決定:第一組「交換兩個子字符串」,第二組「保持這兩個子字符串的順序不變」
"r/g / e/at" --> "r/g / e/ a/t" // 繼續(xù)遞歸執(zhí)行此算法,將 "at" 分割得到 "a/t"
"r/g / e/ a/t" --> "r/g / e/ a/t" // 隨機決定:「保持這兩個子字符串的順序不變」
算法終止,結果字符串和 s2 相同,都是 "rgeat"
這是一種能夠擾亂 s1 得到 s2 的情形,可以認為 s2 是 s1 的擾亂字符串,返回 true

示例 2

輸入:s1 = "abcde", s2 = "caebd"
輸出:false

示例 3

輸入:s1 = "a", s2 = "a"
輸出:true

提示:

  • s1.length == s2.length
  • 1 <= s1.length <= 30
  • s1s2 由小寫英文字母組成

3. 答案

題解 1

class Solution {
   func isScramble(_ s1: String, _ s2: String) -> Bool {
       if s1 == s2 {
           return true
       }

       var letters = [Int](repeating: 0, count: 26)

       for i in 0..<s1.count {
           let aASCII = Character("a").ascii
           letters[s1[i].ascii - aASCII] += 1
           letters[s2[i].ascii - aASCII] -= 1
       }
       for i in 0..<26 {
           if letters[i] != 0 {
               return false
           }
       }
       for i in 1..<s1.count {
           if isScramble(s1[0..<i], s2[0..<i]) &&
               isScramble(s1[i..<s1.count], s2[i..<s2.count]) {
               return true
           }
           if isScramble(s1[0..<i], s2[(s2.count - i)..<s2.count]) &&
               isScramble(s1[i..<s1.count], s2[0..<(s2.count - i)]) {
               return true
           }
       }

       return false
   }
}

extension String {
   subscript (i: Int) -> Character {
       return self[index(startIndex, offsetBy: i)]
   }

   subscript(_ range: CountableRange<Int>) -> String {
       let idx1 = index(startIndex, offsetBy: max(0, range.lowerBound))
       let idx2 = index(startIndex, offsetBy: min(self.count, range.upperBound))
       return String(self[idx1..<idx2])
   }
}

extension Character {
   var ascii: Int {
       get {
           let s = String(self).unicodeScalars
           return Int(s[s.startIndex].value)
       }
   }

   func isDigit() -> Bool {
       return self >= "0" && self <= "9"
   }
}

點擊前往 LeetCode 練習

關于我們

我們是由 Swift 愛好者共同維護,我們會分享以 Swift 實戰(zhàn)、SwiftUI、Swift 基礎為核心的技術內容,也整理收集優(yōu)秀的學習資料。文章來源地址http://www.zghlxwxcb.cn/news/detail-735000.html

到了這里,關于LeetCode - #87 擾亂字符串的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 數據結構與算法之字符串: Leetcode 557. 反轉字符串中的單詞 III (Typescript版)

    翻轉字符串中的單詞 III https://leetcode.cn/problems/reverse-words-in-a-string-iii/ 描述 給定一個字符串 s ,你需要反轉字符串中每個單詞的字符順序,同時仍保留空格和單詞的初始順序。 示例 1: 示例 2: 提示: 1 = s.length = 5 * 1 0 4 10^4 1 0 4 s 包含可打印的 ASCII 字符。 s 不包含任何開頭或

    2024年02月01日
    瀏覽(24)
  • 代碼隨想錄 Leetcode459. 重復的子字符串(KMP算法)

    代碼隨想錄 Leetcode459. 重復的子字符串(KMP算法)

    ? ? ? ? 此解法讀者需要了解什么是KMP算法以及KMP算法中next數組的具體含義才能理解 ? ? ? ? 因為在KMP算法的next數組中,next[index]表示 i ndex之前的最大長度的相同前綴后綴值 ,那么要判斷整個字符串中是否由重復字串構成,只需要以下兩個條件: ? ? ? ? 1.next[n - 1] !=

    2024年01月19日
    瀏覽(100)
  • 【動態(tài)規(guī)劃】【字符串】擾亂字符串

    【動態(tài)規(guī)劃】【字符串】擾亂字符串

    視頻算法專題 動態(tài)規(guī)劃匯總 字符串 使用下面描述的算法可以擾亂字符串 s 得到字符串 t : 如果字符串的長度為 1 ,算法停止 如果字符串的長度 1 ,執(zhí)行下述步驟: 在一個隨機下標處將字符串分割成兩個非空的子字符串。即,如果已知字符串 s ,則可以將其分成兩個子字符

    2024年02月03日
    瀏覽(24)
  • 數據結構與算法之字符串: Leetcode 20. 有效的括號 (Typescript版)

    有效的括號 https://leetcode.cn/problems/valid-parentheses/ 描述 給定一個只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判斷字符串是否有效。 有效字符串需滿足: 左括號必須用相同類型的右括號閉合。 左括號必須以正確的順序閉合。 每個右括號都有一個對應的相

    2024年02月01日
    瀏覽(22)
  • 【編碼狂想】LeetCode 字符串和數組篇:挑戰(zhàn)算法精髓,深化程序設計基礎

    【編碼狂想】LeetCode 字符串和數組篇:挑戰(zhàn)算法精髓,深化程序設計基礎

    ? ?? 個人主頁: Sarapines Programmer ??? 系列專欄: 本期文章收錄在《C語言闖關筆記》,大家有興趣可以瀏覽和關注,后面將會有更多精彩內容! ??翰墨致贈:翩翩風華激彩虹,豪情壯志醉長空。 劍指星河舞紅塵,夢馳烈馬向未來。 ? ? ??歡迎大家關注??點贊??收藏

    2024年02月04日
    瀏覽(25)
  • 【算法|動態(tài)規(guī)劃No.28】leetcode1312. 讓字符串成為回文串的最少插入次數

    【算法|動態(tài)規(guī)劃No.28】leetcode1312. 讓字符串成為回文串的最少插入次數

    個人主頁:兜里有顆棉花糖 歡迎 點贊?? 收藏? 留言? 加關注??本文由 兜里有顆棉花糖 原創(chuàng) 收錄于專欄【手撕算法系列專欄】【LeetCode】 ??本專欄旨在提高自己算法能力的同時,記錄一下自己的學習過程,希望對大家有所幫助 ??希望我們一起努力、成長,共同進步。

    2024年02月06日
    瀏覽(22)
  • 數據結構與算法之字符串: Leetcode 696. 計數二進制子串 (Typescript版)

    計數二進制子串 https://leetcode.cn/problems/count-binary-substrings/ 描述 給定一個字符串 s,統(tǒng)計并返回具有相同數量 0 和 1 的非空(連續(xù))子字符串的數量,并且這些子字符串中的所有 0 和所有 1 都是成組連續(xù)的。 重復出現(不同位置)的子串也要統(tǒng)計它們出現的次數。 示例 1: 示

    2024年02月01日
    瀏覽(96)
  • 算法訓練day11Leetcode20有效的括號1047刪除字符串中所有相鄰重復項150逆波蘭表達式求值

    https://leetcode.cn/problems/valid-parentheses/description/ https://programmercarl.com/0020.%E6%9C%89%E6%95%88%E7%9A%84%E6%8B%AC%E5%8F%B7.html 判斷右括號后忘記pop 括號匹配是使用棧解決的經典問題。 如果還記得編譯原理的話,編譯器在 詞法分析的過程中處理括號、花括號等這個符號的邏輯,也是使用了棧

    2024年01月17日
    瀏覽(20)
  • ( 字符串) 205. 同構字符串 ——【Leetcode每日一題】

    ( 字符串) 205. 同構字符串 ——【Leetcode每日一題】

    難度:簡單 給定兩個字符串 s 和 t ,判斷它們是否是同構的。 如果 s 中的字符可以按某種映射關系替換得到 t ,那么這兩個字符串是同構的。 每個出現的字符都應當映射到另一個字符,同時不改變字符的順序。不同字符不能映射到同一個字符上,相同字符只能映射到同一個

    2024年02月02日
    瀏覽(65)
  • 【LeetCode】《LeetCode 101》第十二章:字符串

    【LeetCode】《LeetCode 101》第十二章:字符串

    思路及代碼: 242 . 有效的字母異位詞 思路及代碼: 205. 同構字符串 思路及代碼: 647. 回文子串 思路及代碼: 696 . 計數二進制子串 思路及代碼 : 224. 基本計算器 思路及代碼: 227. 基本計算器 II 思路與代碼: 28 . 找出字符串中第一個匹配項的下標 思路及代碼 :409. 最長回文

    2024年02月10日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包