在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the characters in s can be replaced to get t. All occurrences of a character must be replaced with another character while preserving the order of characters. No two characters may map to the same character but a character may map to itself. Example 1: Input: s = Example 2: Input: s = Example 3: Input: s = Note: 给定两个字符串 s 和 t,判断它们是否是同构的。 如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。 所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。 示例 1: 输入: s = 示例 2: 输入: s = 示例 3: 输入: s = 说明: 28ms 1 class Solution { 2 func isIsomorphic(_ s: String, _ t: String) -> Bool { 3 let s = Array(s) 4 let t = Array(t) 5 6 var dict: [Character: Character] = [:] 7 8 for i in 0..<s.count { 9 if let cache = dict[s[i]] { 10 if cache != t[i] { 11 return false 12 } 13 } else if dict.values.contains(t[i]) { 14 return false 15 } else { 16 dict[s[i]] = t[i] 17 } 18 } 19 20 return true 21 } 22 } 28ms 1 class Solution { 2 func isIsomorphic(_ s: String, _ t: String) -> Bool { 3 guard s.count == t.count else { 4 return false 5 } 6 7 var map: [Character: Character] = [:] 8 var set: Set<Character> = [] 9 var charsS = Array(s) 10 var charsT = Array(t) 11 for index in 0..<s.count { 12 let charS = charsS[index] 13 let charT = charsT[index] 14 if let char = map[charS] { 15 if char != charT { 16 return false 17 } 18 } else { 19 if set.contains(charT) { 20 return false 21 } 22 23 map[charS] = charT 24 set.insert(charT) 25 } 26 } 27 28 return true 29 } 30 } 32ms 1 class Solution { 2 func isIsomorphic(_ s: String, _ t: String) -> Bool { 3 let s = Array(s) 4 let t = Array(t) 5 if s.count != t.count { return false } 6 7 var isoMap1 = [Character:Character]() 8 var isoMap2 = [Character:Character]() 9 10 var index = 0 11 12 while index < s.count { 13 14 let c1 = s[index] 15 let c2 = t[index] 16 17 if let saved = isoMap1[c1] { 18 if saved != c2 { 19 return false 20 } 21 } else { 22 isoMap1[c1] = c2 23 } 24 25 if let saved = isoMap2[c2] { 26 if saved != c1 { 27 return false 28 } 29 } else { 30 isoMap2[c2] = c1 31 } 32 index += 1 33 } 34 return true 35 } 36 } 36ms 1 class Solution { 2 func isIsomorphic(_ s: String, _ t: String) -> Bool { 3 var m1 = [Int](repeating: 0, count: 256) 4 var m2 = [Int](repeating: 0, count: 256) 5 var s = Array(s) 6 var t = Array(t) 7 8 for i in 0..<s.count { 9 let sAscii = Int(s[i].unicodeScalars.first?.value ?? 0) 10 let tAscii = Int(t[i].unicodeScalars.first?.value ?? 0) 11 if m1[sAscii] != m2[tAscii] { 12 return false 13 } 14 m1[sAscii] = i + 1 15 m2[tAscii] = i + 1 16 } 17 18 return true 19 } 20 } 44ms 1 class Solution { 2 func isIsomorphic(_ s: String, _ t: String) -> Bool { 3 var s0 = Array(s) 4 var t0 = Array(t) 5 var dic = [Character : Character]() 6 7 8 for i in 0..<s0.count { 9 let s1 = s0[i] 10 let t1 = t0[i] 11 if let tmp = dic[s1] { 12 if tmp == t1 { 13 continue 14 }else { 15 return false 16 } 17 }else { 18 if dic.values.contains(t1) { 19 return false 20 } 21 dic[s1] = t1 22 } 23 } 24 25 return true 26 } 27 } 52ms 1 class Solution { 2 func isIsomorphic(_ s: String, _ t: String) -> Bool { 3 var mapS = [Character:Character]() 4 var mapT = [Character:Character]() 5 for idx in 0 ..< s.count { 6 let cs = s[String.Index.init(encodedOffset: idx)] 7 let ct = t[String.Index.init(encodedOffset: idx)] 8 9 if let c = mapT[ct] { 10 if c != cs { 11 return false 12 } 13 } else { 14 mapT[ct] = cs 15 } 16 17 if let c = mapS[cs] { 18 if c != ct { 19 return false 20 } 21 } else { 22 mapS[cs] = ct 23 } 24 } 25 return true 26 } 27 }
|
请发表评论