1, 题目
给定两个字符串 s 和 t,判断它们是否是同构的。
如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。
所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。
示例 1:
输入: s = "egg", t = "add"输出: true
示例 2:
输入: s = "foo", t = "bar"输出: false
示例 3:
输入: s = "paper", t = "title"输出: true
说明:
你可以假设 s 和 t 具有相同的长度。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/isomorphic-strings
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2, 算法
object Solution {def isIsomorphic(s: String, t: String): Boolean = {if (s.length != t.length) {return false}val z1 = s.zip(t)val m1 = scala.collection.mutable.Map[Char, Char]()z1.foreach {case (k, v) => {if (m1.contains(k)) {if (m1(k) != v) {return false}} else {m1(k) = v}}}val z2 = t.zip(s)val m2 = scala.collection.mutable.Map[Char, Char]()z2.foreach {case (k, v) => {if (m2.contains(k)) {if (m2(k) != v) {return false}} else {m2(k) = v}}}true}}
class Solution:def isIsomorphic(self, s: str, t: str) -> bool:if len(s) != len(t):return Falsez1 = zip(s, t)m1 = {}for k, v in z1:if k in m1:if v != m1[k]:return Falseelse:m1[k] = vz2 = zip(t, s)m2 = {}for k, v in z2:if k in m2:if v != m2[k]:return Falseelse:m2[k] = vreturn True
