[Swift-2019力扣杯春季决赛]2. 按字典序排列最小的等效字符串
发布时间:2020-12-14 04:51:15 所属栏目:百科 来源:网络整理
导读:给出长度相同的两个字符串: A ?和? B ,其中 A[i] 和 B[i] 是一组等价字符。举个例子,如果? A = "abc" ?且? B = "cde" ,那么就有? ‘a‘ == ‘c‘,‘b‘ == ‘d‘,‘c‘ == ‘e‘ 。 等价字符遵循任何等价关系的一般规则: 自反性:‘a‘ == ‘a‘ 对称性
给出长度相同的两个字符串: 等价字符遵循任何等价关系的一般规则:
例如, 利用? 示例 1: 输入:A = "parker",B = "morris",S = "parser" 输出:"makkek" 解释:根据 和 我们可以将这些字符分为,。每组中的字符都是等价的,并按字典序排列。所以答案是 。 AB 中的等价信息,[m,p][a,o][k,r,s][e,i] 共 4 组"makkek" 示例 2: 输入:A = "hello",B = "world",S = "hold" 输出:"hdld" 解释:根据 和 我们可以将这些字符分为,。所以只有 S 中的第二个字符 变成 。 AB 中的等价信息,[h,w][d,e,o][l,r] 共 3 组‘o‘‘d‘,最后答案为"hdld" 示例 3: 输入:A = "leetcode",B = "programs",S = "sourcecode" 输出:"aauaaaaada" 解释:我们可以把 A 和 B 中的等价字符分为,和 ,因此 中除了 和 之外的所有字母都转化成了 ,最后答案为 。[a,o,s,c][l,p][g,t][d,m] 共 4 组S‘u‘‘d‘‘a‘"aauaaaaada" 提示:
80 ms 1 class Solution { 2 var f:[Int] = [Int](repeating:0,count:26) 3 func smallestEquivalentString(_ A: String,_ B: String,_ S: String) -> String { 4 var n:Int = A.count 5 var m:Int = S.count 6 var ans:String = String() 7 for i in 0..<26 8 { 9 f[i] = i 10 } 11 for i in 0..<n 12 { 13 merge(A[i].ascii - 97,B[i].ascii - 97) 14 } 15 for i in 0..<m 16 { 17 ans.append((get(S[i].ascii - 97) + 97).ASCII) 18 } 19 return ans 20 } 21 22 func get(_ x:Int) -> Int 23 { 24 if f[x] == x 25 { 26 return x 27 } 28 f[x] = get(f[x]) 29 return f[x] 30 } 31 32 func merge(_ x:Int,_ y:Int) 33 { 34 var x = x 35 var y = y 36 x = get(x) 37 y = get(y) 38 if x < y 39 { 40 (x,y) = (y,x) 41 } 42 f[x] = y 43 } 44 } 45 46 //String扩展 47 extension String { 48 //subscript函数可以检索数组中的值 49 //直接按照索引方式截取指定索引的字符 50 subscript (_ i: Int) -> Character { 51 //读取字符 52 get {return self[index(startIndex,offsetBy: i)]} 53 } 54 } 55 56 //Character扩展 57 extension Character 58 { 59 //Character转ASCII整数值(定义小写为整数值) 60 var ascii: Int { 61 get { 62 return Int(self.unicodeScalars.first?.value ?? 0) 63 } 64 } 65 } 66 67 //Int扩展 68 extension Int 69 { 70 //Int转Character,ASCII值(定义大写为字符值) 71 var ASCII:Character 72 { 73 get {return Character(UnicodeScalar(self)!)} 74 } 75 } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |