日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[Swift]LeetCode916.单词子集 | Word Subsets

發(fā)布時間:2023/12/18 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Swift]LeetCode916.单词子集 | Word Subsets 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
?微信公眾號:山青詠芝(shanqingyongzhi)
?博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/)
?GitHub地址:https://github.com/strengthen/LeetCode
?原文地址:https://www.cnblogs.com/strengthen/p/9857027.html?
?如果鏈接不是山青詠芝的博客園地址,則可能是爬取作者的文章。
?原文已修改更新!強烈建議點擊原文地址閱讀!支持作者!支持原創(chuàng)!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

We are given two arrays?A?and?B?of words.? Each word is a string of lowercase letters.

Now, say that?word?b?is a subset of word?a?if every letter in?b?occurs in?a,?including multiplicity.? For example,?"wrr"is a subset of?"warrior", but is not a subset of?"world".

Now say a word?a?from?A?is?universal?if for every?b?in?B,?b?is a subset of?a.?

Return a list of all universal words in?A.? You can return the words in any order.

Example 1:

Input: A = ["amazon","apple","facebook","google","leetcode"], B = ["e","o"] Output: ["facebook","google","leetcode"]

Example 2:

Input: A = ["amazon","apple","facebook","google","leetcode"], B = ["l","e"] Output: ["apple","google","leetcode"]

Example 3:

Input: A = ["amazon","apple","facebook","google","leetcode"], B = ["e","oo"] Output: ["facebook","google"]

Example 4:

Input: A = ["amazon","apple","facebook","google","leetcode"], B = ["lo","eo"] Output: ["google","leetcode"]

Example 5:

Input: A = ["amazon","apple","facebook","google","leetcode"], B = ["ec","oc","ceo"] Output: ["facebook","leetcode"]

Note:

  • 1 <= A.length, B.length <= 10000
  • 1 <= A[i].length, B[i].length?<= 10
  • A[i]?and?B[i]?consist only of lowercase letters.
  • All words in?A[i]?are unique: there isn't?i != j?with?A[i] == A[j].

  • 我們給出了兩個數(shù)組A和B單詞。每個單詞都是一串小寫字母。

    現(xiàn)在,假設每個字母都出現(xiàn)在,包括多重性,那么單詞b就是單詞的一個子集。例如,"wrr"是"warrior"的子集,但不是"world"的子集。

    現(xiàn)在說一個字a從A是普遍的,若對所有b的B,b?是的一個子集a。?

    返回所有通用單詞的列表A。您可以按任何順序返回單詞。

    例1:

    輸入: A = [“amazon”,“apple”,“facebook”,“google”,“l(fā)eetcode”],B = [“e”,“o”] 輸出:[“facebook”,“google”,“l(fā)eetcode “]

    例2:

    輸入: A = [“amazon”,“apple”,“facebook”,“google”,“l(fā)eetcode”],B = [“l(fā)”,“e”] 輸出:[“apple”,“google”,“l(fā)eetcode “]

    例3:

    輸入: A = [“amazon”,“apple”,“facebook”,“google”,“l(fā)eetcode”],B = [“e”,“oo”] 輸出:[“facebook”,“google”]

    例4:

    輸入: A = [“amazon”,“apple”,“facebook”,“google”,“l(fā)eetcode”],B = [“l(fā)o”,“eo”] 輸出:[“google”,“l(fā)eetcode”]

    例5:

    輸入: A = [“amazon”,“apple”,“facebook”,“google”,“l(fā)eetcode”],B = [“ec”,“oc”,“ceo”] 輸出:[“facebook”,“l(fā)eetcode “]

    注意:

  • 1 <= A.length, B.length <= 10000
  • 1 <= A[i].length, B[i].length?<= 10
  • A[i]并且B[i]僅由小寫字母組成。
  • 在所有的話A[i]都是獨一無二的:沒有i != j用A[i] == A[j]。

  • 1536ms 1 class Solution { 2 func wordSubsets(_ A: [String], _ B: [String]) -> [String] { 3 var patterns = Dictionary(B[0].map { ($0, 1) }, uniquingKeysWith: +) 4 for b in B { 5 updatePatterns(&patterns, b) 6 } 7 var results = [String]() 8 outer: for a in A { 9 let dict = Dictionary(a.map { ($0, 1) }, uniquingKeysWith: +) 10 for key in patterns.keys { 11 guard let value = dict[key] else { 12 continue outer 13 } 14 if value < patterns[key]! { 15 continue outer 16 } 17 } 18 results.append(a) 19 } 20 return results 21 } 22 23 fileprivate func updatePatterns(_ patterns: inout [Character : Int], _ library: String) { 24 var chars = Array(library) 25 let dict = Dictionary(chars.map { ($0, 1) }, uniquingKeysWith: +) 26 for key in dict.keys { 27 if let pattern = patterns[key] { 28 patterns[key] = max(pattern, dict[key]!) 29 } else { 30 patterns[key] = dict[key] 31 } 32 } 33 } 34 }

    1864ms

    1 class Solution { 2 func wordSubsets(_ A: [String], _ B: [String]) -> [String] { 3 var bmax:[Int] = [Int](repeating: 0,count: 26) 4 for b in B 5 { 6 var bCount:[Int] = count(b) 7 for i in 0..<26 8 { 9 bmax[i] = max(bmax[i], bCount[i]) 10 } 11 } 12 var ans:[String] = [String]() 13 //類似goto語句功能 14 search: 15 for a in A 16 { 17 var aCount:[Int] = count(a) 18 for i in 0..<26 19 { 20 if aCount[i] < bmax[i] 21 { 22 23 continue search 24 25 } 26 } 27 ans.append(a) 28 } 29 return ans 30 } 31 32 func count(_ str:String) -> [Int] 33 { 34 var ans:[Int] = [Int](repeating: 0,count: 26) 35 for char in str.characters 36 { 37 //A:65 a:97 38 ans[char.toInt() - 97] += 1 39 } 40 return ans 41 } 42 } 43 44 //Character擴展方法 45 extension Character 46 { 47 func toInt() -> Int 48 { 49 var num:Int = Int() 50 for scalar in String(self).unicodeScalars 51 { 52 num = Int(scalar.value) 53 } 54 return num 55 } 56 }

    2056ms

    1 class Solution { 2 func wordSubsets(_ A: [String], _ B: [String]) -> [String] { 3 var hms: [Character:Int] = [:] 4 for b in B { 5 var locHm: [Character:Int] = [:] 6 for symbol in b { 7 let temp = (locHm[symbol] ?? 0) + 1 8 locHm[symbol] = temp 9 hms[symbol] = max((hms[symbol] ?? 0), temp) 10 } 11 } 12 13 var res: [Int] = [] 14 var aHms: [[Character:Int]] = Array(repeating: [:], count: A.count) 15 for (index, a) in A.enumerated() { 16 for symbol in a { 17 aHms[index][symbol] = (aHms[index][symbol] ?? 0) + 1 18 } 19 } 20 21 for (index, hm) in aHms.enumerated() { 22 var ok = true 23 for k in hms.keys { 24 if (hm[k] ?? 0) < hms[k]! { 25 ok = false 26 break 27 } 28 } 29 if ok { 30 res.append(index) 31 } 32 } 33 34 return res.map({A[$0]}) 35 } 36 }

    2208ms

    1 class Solution { 2 func wordSubsets(_ A: [String], _ B: [String]) -> [String] { 3 let bDicts:[[Character:Int]] = B.map { wordDict($0) } 4 var bWord: [Character:Int] = [:] 5 for bDict in bDicts { 6 for (ch, count) in bDict { 7 bWord[ch] = max((bWord[ch] ?? 0), count) 8 } 9 } 10 11 var result: [String] = [] 12 for aWord in A { 13 let aDict = wordDict(aWord) 14 if contains(aDict, bWord) { 15 result.append(aWord) 16 } 17 } 18 return result 19 } 20 21 func wordDict(_ str: String) -> [Character:Int] { 22 var result: [Character:Int] = [:] 23 for ch in str { 24 result[ch] = (result[ch] ?? 0) + 1 25 } 26 return result 27 } 28 29 func contains(_ aDict:[Character:Int], _ bDict:[Character: Int]) -> Bool { 30 for (key, count) in bDict { 31 if aDict[key] == nil || aDict[key]! < count { 32 return false 33 } 34 } 35 return true 36 } 37 }

    2240ms

    1 class Solution { 2 func wordSubsets(_ A: [String], _ B: [String]) -> [String] { 3 let universe: [Character: Int] = B.reduce(into: [:]) { res, next in 4 let c = countCharacters(in: next) 5 for kv in c { 6 res[kv.key] = max(kv.value, res[kv.key] ?? 0) 7 } 8 } 9 return A.filter { self.isWord($0, universalIn: universe) } 10 } 11 12 func isWord(_ word: String, universalIn universe: [Character: Int]) -> Bool { 13 var wordCount = countCharacters(in: word) 14 for kv in universe { 15 guard let count = wordCount[kv.key], count >= kv.value else { 16 return false 17 } 18 } 19 return true 20 } 21 22 func countCharacters(in word: String) -> [Character: Int] { 23 return word.reduce(into: [:]) { (result, next) in 24 let count = result[next] ?? 0 25 result[next] = count + 1 26 } 27 } 28 }

    2484ms

    1 class Solution { 2 func wordSubsets(_ A: [String], _ B: [String]) -> [String] { 3 let universe: [Character: Int] = B.reduce(into: [:]) { res, next in 4 let c = countCharacters(in: next) 5 for kv in c { 6 res[kv.key] = max(kv.value, res[kv.key] ?? 0) 7 } 8 } 9 10 return A.filter { (word) -> Bool in 11 return self.isWord(word, universalIn: universe) 12 } 13 } 14 15 func isWord(_ word: String, universalIn universe: [Character: Int]) -> Bool { 16 var wordCount = countCharacters(in: word) 17 for kv in universe { 18 guard let count = wordCount[kv.key], count >= kv.value else { 19 return false 20 } 21 } 22 return true 23 } 24 25 func countCharacters(in word: String) -> [Character: Int] { 26 return word.reduce(into: [:]) { (result, next) in 27 let count = result[next] ?? 0 28 result[next] = count + 1 29 } 30 } 31 }

    2652ms

    1 class Solution { 2 func wordSubsets(_ A: [String], _ B: [String]) -> [String] { 3 4 let bCounterArray = B 5 .map { 6 $0.reduce(into: [:]) { 7 $0[String($1), default: 0] += 1 8 } 9 } 10 .reduce(into: [:]) { (dict: inout [String: Int], word: [String: Int]) in 11 word.forEach { 12 dict[$0] = (dict[$0] == nil ? $1 : max(dict[$0]!, $1)) 13 } 14 } 15 16 let aCounterDictionary = A.reduce(into: [:]) { 17 $0[$1] = $1.reduce(into: [:]) { 18 $0[String($1), default: 0] += 1 19 } 20 } 21 22 var answer = [String]() 23 24 for (word, aCounter) in aCounterDictionary { 25 var isUniversal = true 26 for (key, bval) in bCounterArray { 27 guard let aval = aCounter[key], aval >= bval else { 28 isUniversal = false 29 break 30 } 31 } 32 33 if isUniversal { 34 answer.append(word) 35 } 36 } 37 38 return answer 39 } 40 }

    2708ms

    1 class Solution { 2 func wordSubsets(_ A: [String], _ B: [String]) -> [String] { 3 var mb = [Character: Int]() 4 for b1 in B { 5 var d = [Character: Int]() 6 for b2 in b1 { 7 d[b2, default: 0] += 1 8 } 9 for k in d.keys { 10 mb[k, default: 0] = max(mb[k, default: 0], d[k]!) 11 } 12 } 13 //print(mb) 14 return A.filter { s in 15 var d = [Character: Int]() 16 for c in s { 17 d[c, default: 0] += 1 18 } 19 //print(d) 20 for k in mb.keys { 21 guard mb[k]! <= d[k, default: 0] else { 22 return false 23 } 24 } 25 return true 26 } 27 } 28 }

    2712ms

    1 class Solution { 2 func wordSubsets(_ A: [String], _ B: [String]) -> [String] { 3 var result = [String]() 4 var bMap = [Character : Int]() 5 for bWord in B { 6 var bMapTemp = [Character : Int]() 7 for character in bWord { 8 if let value = bMapTemp[character] { 9 bMapTemp[character] = value + 1 10 } else { 11 bMapTemp[character] = 1 12 } 13 14 if let value1 = bMap[character], let value2 = bMapTemp[character] { 15 bMap[character] = max(value1, value2) 16 } else { 17 bMap[character] = bMapTemp[character] 18 } 19 20 } 21 22 } 23 //print(bMap) 24 for aWord in A { 25 var aMap = [Character : Int]() 26 for character in aWord { 27 if let value = aMap[character] { 28 aMap[character] = value + 1 29 } else { 30 aMap[character] = 1 31 } 32 } 33 34 var shouldAdd = true 35 for (key, value) in bMap { 36 //print("key \(key), value \(value), aMap \(aMap)") 37 guard let aValue = aMap[key] else { 38 shouldAdd = false 39 break 40 } 41 if aValue < value { 42 shouldAdd = false 43 break 44 } 45 } 46 if shouldAdd { 47 result.append(aWord) 48 } 49 } 50 51 return result 52 } 53 }

    3208ms

    1 class Solution { 2 3 // B = ["o", "oo", "oo", "ooo"] 4 5 func wordSubsets(_ A: [String], _ B: [String]) -> [String] { 6 let reducedSet: [Character: Int] = B.reduce(into: [:]) { res, next in 7 for (k, v) in countCharacters(in: next) { 8 res[k] = max(v, res[k] ?? 0) 9 } 10 } 11 return A.filter { self.isWord($0, universalFor: reducedSet) } 12 } 13 14 func isWord(_ word: String, universalFor characters: [Character: Int]) -> Bool { 15 let characterCount = countCharacters(in: word) 16 return !characters.contains { 17 let count = characterCount[$0.key] 18 return count == nil || count! < $0.value 19 } 20 } 21 22 func countCharacters(in word: String) -> [Character: Int] { 23 return word.reduce(into: [:]) { (result, next) in 24 let count = result[next] ?? 0 25 result[next] = count + 1 26 } 27 } 28 }

    3600ms

    1 class Solution { 2 3 // B = ["o", "oo", "oo", "ooo"] 4 5 func wordSubsets(_ A: [String], _ B: [String]) -> [String] { 6 let reducedSet: [Character: Int] = B.reduce(into: [:]) { res, next in 7 for (k, v) in countCharacters(in: next) { 8 res[k] = max(v, res[k] ?? 0) 9 } 10 } 11 return A.filter { self.isWord($0, universalFor: reducedSet) } 12 } 13 14 func isWord(_ word: String, universalFor characters: [Character: Int]) -> Bool { 15 let characterCount = countCharacters(in: word) 16 return !characters.contains { 17 let count = characterCount[$0.key] 18 return count == nil || count! < $0.value 19 } 20 } 21 22 func countCharacters(in word: String) -> [Character: Int] { 23 return word.reduce(into: [:]) { (result, next) in 24 let count = result[next] ?? 0 25 result[next] = count + 1 26 } 27 } 28 }

    ?

    轉載于:https://www.cnblogs.com/strengthen/p/9857027.html

    總結

    以上是生活随笔為你收集整理的[Swift]LeetCode916.单词子集 | Word Subsets的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 欧美日韩精品网站 | 熟妇人妻一区二区三区四区 | 毛片一区二区 | 亚洲成人生活片 | 一卡二卡三卡四卡 | 香蕉久久夜色精品国产使用方法 | 国产一区二区不卡在线 | 制服诱惑一区二区三区 | 与子敌伦刺激对白播放的优点 | 欧美日批| 黄色二级毛片 | 一级aaa毛片 | 精品麻豆 | 色播欧美| 69xxx少妇按摩视频 | 丝袜人妻一区二区三区 | 美女福利网站 | 午夜偷拍视频 | 一级网站在线观看 | 国产成人精品一区二区三 | 另类视频一区 | 免费看国产视频 | 精品人妻少妇嫩草av无码专区 | 资源av| 欧美日韩综合一区二区三区 | 欧美成性色 | 亚洲熟妇无码av在线播放 | 国产精品国产一区 | 亚洲香蕉网站 | 亚洲欧美日韩一区 | 一区二区三区四区精品 | 国产91免费视频 | 日韩1页 | 求一个黄色网址 | 欧美一区二区三区免费 | 河北彩花69xx精品一区 | 性欧美一区 | 在线免费观看日韩av | 女生扒开尿口 | 国产 丝袜 欧美中文 另类 | 奇米影视888 | 亚洲一在线 | 毛片a级片 | 国产小视频免费在线观看 | 亚洲涩涩爱| 欧美激情一二区 | 97成人人妻一区二区三区 | 每日av在线 | 午夜精品久久久久久久无码 | 美女午夜影院 | www婷婷av久久久影片 | 国产福利片在线 | 欧美大片免费观看网址 | 呦女精品 | 亚洲熟妇无码一区二区三区 | 美女福利在线观看 | 一级黄色特级片 | 玖玖免费 | 在线免费看av的网站 | 国产精品久久久久影院 | 亚洲少妇18p| 国产精品久久久久久99 | 国产三级不卡 | av最新地址| 亚洲成人av一区二区 | 亚洲精品久久久久中文字幕二区 | 五月天最新网址 | 四虎色播| 欧美熟妇精品久久久久久 | 美女扒开屁股让男人桶 | 国产老熟妇精品观看 | 99久久久无码国产精品衣服 | jizz成人 | 人妻无码中文字幕免费视频蜜桃 | 青春草视频在线免费观看 | 四虎黄色片 | 2018狠狠干| 久久偷拍免费视频 | 亚洲av鲁丝一区二区三区 | 深夜福利视频网站 | 久久狠| 国产色爽| 永久久久久久久 | 欧美日韩加勒比 | 亚洲国产中文字幕在线观看 | 久久成人小视频 | 亚洲男人网站 | 久久国产乱 | 成人午夜视频免费看 | 久久久久久一级片 | 不卡一区在线 | 四虎影院新网址 | 免费裸体视频网站 | 久久久久国产一区二区三区 | 在线天堂6 | 99在线无码精品入口 | 精品久久BBBBB精品人妻 | 欧美成人三级视频 | av国产在线观看 |