[Swift]LeetCode205. 同构字符串 | Isomorphic Strings
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:https://www.cnblogs.com/strengthen/p/9745441.html
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
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:
"egg",
"add"
Example 2:
"foo",
"bar"
Example 3:
"paper",
"title"
Note:
You may assume both s and t have the same length.
给定两个字符串 s 和 t,判断它们是否是同构的。
如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。
所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。
示例 1:
"egg",
"add"
示例 2:
"foo",
"bar"
示例 3:
"paper",
"title"
说明:
你可以假设 s 和 t 具有相同的长度。
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 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了