Leetcode205. 同构字符串

本文详细解析了LeetCode上的经典题目——同构字符串(LeetCode 205),提供了两种解决方案:一种是利用字符串的首次出现位置进行判断,另一种是采用hashMap方法验证两个方向的映射关系,确保了判断的准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Leetcode205. 同构字符串

题目:
给定两个字符串 s 和 t,判断它们是否是同构的。
如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。
所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。
示例 1:
输入: s = “egg”, t = “add”
输出: true
题解:
方案一:使用字符串第一次出现的位置(indexOf)来判断
方案二:使用hashMap方式将两个字符串的字符存入key,value。
注意:
我们需要验证 s - > t 和 t -> s 两个方向。如果验证一个方向,是不可以的。
举个例子,s = ab, t = cc,如果单看 s -> t ,那么 a -> c, b -> c 是没有问题的。必须再验证 t -> s,此时,c -> a, c -> b,一个字母对应了多个字母,所以不是同构的。
scala代码如下:

/**
    * 使用字符串第一次出现的位置来判断
    *
    * @param s
    * @param t
    * @return
    */
  def isIsomorphic(s: String, t: String): Boolean = {
    var flag = true
    val ch1 = s.toCharArray
    val ch2 = t.toCharArray
    for (i <- 0 until ch1.length) {
      //indexOf:返回第一次出现的指定子字符串在此字符串中的索引
      if (s.indexOf(ch1(i)) != t.indexOf(ch2(i))) {
        flag = false
      }
    }
    flag
  }
 /**
    * hashMap方法
    *
    * @param s
    * @param t
    * @return
    */
  def isIsomorphic2(s: String, t: String): Boolean = {
    isIsomorphicHelper(s,t) && isIsomorphicHelper(t,s)
  }
  def isIsomorphicHelper(s: String, t: String): Boolean = {
    val map = new java.util.HashMap[Char, Char]()
    var flag = true
    var i = 0
    while (i < s.length && flag) {
      val s1: Char = s.charAt(i)
      val t1: Char = t.charAt(i)
      if (map.containsKey(s1)) {
        if (map.get(s1) != t1) {
          flag = false
        }
      } else {
        map.put(s1, t1)
      }
      i = i + 1
    }
    flag
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值