From 68ad3751edd8155ff6380ddf8e2084440805a983 Mon Sep 17 00:00:00 2001 From: Lanre Adedara Date: Wed, 15 May 2024 15:17:58 +0100 Subject: [PATCH 1/4] Swift Implementation for LCCI 17.22 --- lcci/17.22.Word Transformer/README.md | 60 ++++++++++++++++++++++ lcci/17.22.Word Transformer/README_EN.md | 60 ++++++++++++++++++++++ lcci/17.22.Word Transformer/Solution.swift | 57 ++++++++++++++++++++ 3 files changed, 177 insertions(+) create mode 100644 lcci/17.22.Word Transformer/Solution.swift diff --git a/lcci/17.22.Word Transformer/README.md b/lcci/17.22.Word Transformer/README.md index d67998b039430..cdcc88605f9d1 100644 --- a/lcci/17.22.Word Transformer/README.md +++ b/lcci/17.22.Word Transformer/README.md @@ -257,6 +257,66 @@ function findLadders(beginWord: string, endWord: string, wordList: string[]): st } ``` +```swift +class Solution { + private var ans = [String]() + private var wordList: [String] + private var endWord: String + private var vis: [Bool] + + init(wordList: [String], endWord: String) { + self.wordList = wordList + self.endWord = endWord + self.vis = Array(repeating: false, count: wordList.count) + } + + func findLadders(_ beginWord: String) -> [String] { + ans.append(beginWord) + if dfs(beginWord) { + return ans + } else { + return [] + } + } + + private func dfs(_ s: String) -> Bool { + if s == endWord { + return true + } + for i in 0.. Bool { + if s.count != t.count { + return false + } + var count = 0 + for (sc, tc) in zip(s, t) { + if sc != tc { + count += 1 + if count > 1 { + return false + } + } + } + return count == 1 + } +} +``` + diff --git a/lcci/17.22.Word Transformer/README_EN.md b/lcci/17.22.Word Transformer/README_EN.md index bcb9e6cc583f5..1d21b32e45e21 100644 --- a/lcci/17.22.Word Transformer/README_EN.md +++ b/lcci/17.22.Word Transformer/README_EN.md @@ -274,6 +274,66 @@ function findLadders(beginWord: string, endWord: string, wordList: string[]): st } ``` +```swift +class Solution { + private var ans = [String]() + private var wordList: [String] + private var endWord: String + private var vis: [Bool] + + init(wordList: [String], endWord: String) { + self.wordList = wordList + self.endWord = endWord + self.vis = Array(repeating: false, count: wordList.count) + } + + func findLadders(_ beginWord: String) -> [String] { + ans.append(beginWord) + if dfs(beginWord) { + return ans + } else { + return [] + } + } + + private func dfs(_ s: String) -> Bool { + if s == endWord { + return true + } + for i in 0.. Bool { + if s.count != t.count { + return false + } + var count = 0 + for (sc, tc) in zip(s, t) { + if sc != tc { + count += 1 + if count > 1 { + return false + } + } + } + return count == 1 + } +} +``` + diff --git a/lcci/17.22.Word Transformer/Solution.swift b/lcci/17.22.Word Transformer/Solution.swift new file mode 100644 index 0000000000000..801e7c08f1746 --- /dev/null +++ b/lcci/17.22.Word Transformer/Solution.swift @@ -0,0 +1,57 @@ +class Solution { + private var ans = [String]() + private var wordList: [String] + private var endWord: String + private var vis: [Bool] + + init(wordList: [String], endWord: String) { + self.wordList = wordList + self.endWord = endWord + self.vis = Array(repeating: false, count: wordList.count) + } + + func findLadders(_ beginWord: String) -> [String] { + ans.append(beginWord) + if dfs(beginWord) { + return ans + } else { + return [] + } + } + + private func dfs(_ s: String) -> Bool { + if s == endWord { + return true + } + for i in 0.. Bool { + if s.count != t.count { + return false + } + var count = 0 + for (sc, tc) in zip(s, t) { + if sc != tc { + count += 1 + if count > 1 { + return false + } + } + } + return count == 1 + } +} \ No newline at end of file From faf7d4afaee0c00deb66a87e1fb39fe8d0bd63f3 Mon Sep 17 00:00:00 2001 From: Libin YANG Date: Thu, 16 May 2024 09:10:57 +0800 Subject: [PATCH 2/4] Update Solution.swift --- lcci/17.22.Word Transformer/Solution.swift | 38 +++++++++------------- 1 file changed, 15 insertions(+), 23 deletions(-) diff --git a/lcci/17.22.Word Transformer/Solution.swift b/lcci/17.22.Word Transformer/Solution.swift index 801e7c08f1746..e256f0b043df2 100644 --- a/lcci/17.22.Word Transformer/Solution.swift +++ b/lcci/17.22.Word Transformer/Solution.swift @@ -1,24 +1,17 @@ class Solution { - private var ans = [String]() - private var wordList: [String] - private var endWord: String - private var vis: [Bool] - - init(wordList: [String], endWord: String) { + private var ans: [String] = [] + private var wordList: [String] = [] + private var endWord: String = "" + private var vis: [Bool] = [] + + func findLadders(_ beginWord: String, _ endWord: String, _ wordList: [String]) -> [String] { self.wordList = wordList self.endWord = endWord - self.vis = Array(repeating: false, count: wordList.count) - } - - func findLadders(_ beginWord: String) -> [String] { ans.append(beginWord) - if dfs(beginWord) { - return ans - } else { - return [] - } + vis = Array(repeating: false, count: wordList.count) + return dfs(beginWord) ? ans : [] } - + private func dfs(_ s: String) -> Bool { if s == endWord { return true @@ -34,24 +27,23 @@ class Solution { return true } ans.removeLast() - vis[i] = false } return false } - + private func check(_ s: String, _ t: String) -> Bool { if s.count != t.count { return false } - var count = 0 + var cnt = 0 for (sc, tc) in zip(s, t) { if sc != tc { - count += 1 - if count > 1 { + cnt += 1 + if cnt > 1 { return false } } } - return count == 1 + return cnt == 1 } -} \ No newline at end of file +} From 0cdc2b2407812c5bd5146d5062076ff12476430d Mon Sep 17 00:00:00 2001 From: Libin YANG Date: Thu, 16 May 2024 09:11:14 +0800 Subject: [PATCH 3/4] Update README_EN.md --- lcci/17.22.Word Transformer/README_EN.md | 36 +++++++++--------------- 1 file changed, 14 insertions(+), 22 deletions(-) diff --git a/lcci/17.22.Word Transformer/README_EN.md b/lcci/17.22.Word Transformer/README_EN.md index 1d21b32e45e21..6e4b7495bbe2e 100644 --- a/lcci/17.22.Word Transformer/README_EN.md +++ b/lcci/17.22.Word Transformer/README_EN.md @@ -276,26 +276,19 @@ function findLadders(beginWord: string, endWord: string, wordList: string[]): st ```swift class Solution { - private var ans = [String]() - private var wordList: [String] - private var endWord: String - private var vis: [Bool] - - init(wordList: [String], endWord: String) { + private var ans: [String] = [] + private var wordList: [String] = [] + private var endWord: String = "" + private var vis: [Bool] = [] + + func findLadders(_ beginWord: String, _ endWord: String, _ wordList: [String]) -> [String] { self.wordList = wordList self.endWord = endWord - self.vis = Array(repeating: false, count: wordList.count) - } - - func findLadders(_ beginWord: String) -> [String] { ans.append(beginWord) - if dfs(beginWord) { - return ans - } else { - return [] - } + vis = Array(repeating: false, count: wordList.count) + return dfs(beginWord) ? ans : [] } - + private func dfs(_ s: String) -> Bool { if s == endWord { return true @@ -311,25 +304,24 @@ class Solution { return true } ans.removeLast() - vis[i] = false } return false } - + private func check(_ s: String, _ t: String) -> Bool { if s.count != t.count { return false } - var count = 0 + var cnt = 0 for (sc, tc) in zip(s, t) { if sc != tc { - count += 1 - if count > 1 { + cnt += 1 + if cnt > 1 { return false } } } - return count == 1 + return cnt == 1 } } ``` From 664abb55dcbc0262ea46cffc6cbcc8c61edb881a Mon Sep 17 00:00:00 2001 From: Libin YANG Date: Thu, 16 May 2024 09:11:37 +0800 Subject: [PATCH 4/4] Update README.md --- lcci/17.22.Word Transformer/README.md | 36 +++++++++++---------------- 1 file changed, 14 insertions(+), 22 deletions(-) diff --git a/lcci/17.22.Word Transformer/README.md b/lcci/17.22.Word Transformer/README.md index cdcc88605f9d1..55a287302dbde 100644 --- a/lcci/17.22.Word Transformer/README.md +++ b/lcci/17.22.Word Transformer/README.md @@ -259,26 +259,19 @@ function findLadders(beginWord: string, endWord: string, wordList: string[]): st ```swift class Solution { - private var ans = [String]() - private var wordList: [String] - private var endWord: String - private var vis: [Bool] - - init(wordList: [String], endWord: String) { + private var ans: [String] = [] + private var wordList: [String] = [] + private var endWord: String = "" + private var vis: [Bool] = [] + + func findLadders(_ beginWord: String, _ endWord: String, _ wordList: [String]) -> [String] { self.wordList = wordList self.endWord = endWord - self.vis = Array(repeating: false, count: wordList.count) - } - - func findLadders(_ beginWord: String) -> [String] { ans.append(beginWord) - if dfs(beginWord) { - return ans - } else { - return [] - } + vis = Array(repeating: false, count: wordList.count) + return dfs(beginWord) ? ans : [] } - + private func dfs(_ s: String) -> Bool { if s == endWord { return true @@ -294,25 +287,24 @@ class Solution { return true } ans.removeLast() - vis[i] = false } return false } - + private func check(_ s: String, _ t: String) -> Bool { if s.count != t.count { return false } - var count = 0 + var cnt = 0 for (sc, tc) in zip(s, t) { if sc != tc { - count += 1 - if count > 1 { + cnt += 1 + if cnt > 1 { return false } } } - return count == 1 + return cnt == 1 } } ```