Leetcode 205 Isomorphic Strings

本文探讨了两种高效算法来判断两个字符串是否为同构。第一种算法通过遍历并对比字符对应关系实现,但存在大量重复计算。第二种算法利用哈希映射,确保s到t的映射唯一且双向,大幅提高了效率。

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

在这里插入图片描述
思路1:遍历。遍历s和t。在s中取出所有两两组合的情况。如果s中碰到两个相同的字符,那么记下两个字符的下标。此时去t中比较相同两个下标的字符是否相等。如果不等,返回false;如果相等,继续遍历。此思路很容易想到,但是存在大量的重复计算。所以最后导致time limit exceeded。但是test cases是全部通过的。下面给出代码:

class Solution {
    public boolean isIsomorphic(String s, String t) {
        for(int i = 0; i < s.length() - 1; i++){
            for(int j = i+1; j < s.length(); j++){
                if(s.charAt(i) == s.charAt(j)){
                   if(t.charAt(i) != t.charAt(j)){return false;} 
                }else{
                   if(t.charAt(i) == t.charAt(j)){return false;}
                }
            }
        }
        return true;
    }
}

思路2:使用hashmap,s作为key,t作为value。这是一个特殊的map,不仅仅需要key唯一,value也需要唯一。不能出现例如:ab->aa 这样的情况。满足以上的条件,则返回true。而且使用hashmap也可以避免大量的重复计算。这也是这个做法leetcode accept的原因。直接给上代码:

class Solution {
    public boolean isIsomorphic(String s, String t) {
        Map<Character,Character> mappings = new HashMap<>();
        int i = 0;
        int j= 0;
        int len = s.length();
        while(i < len && j < len){
            if(mappings.containsKey(s.charAt(i))){
               if(mappings.get(s.charAt(i)) != t.charAt(j)) {
                   return false;
               }else{
                   i++;
                   j++;
               }
            }else{
                if(mappings.containsValue(t.charAt(j))){
                    return false;
                }else{
                    mappings.put(s.charAt(i),t.charAt(j));
                    i++;
                    j++;  
                }
            }
        }
        return true;
    }
}

总结:

  1. map中key唯一,value可以不唯一。可以多个key对应的value都是相同的。这也是为什么有get(key)但是没有get(value)的原因。就算如果有get(value)的话,那返回结果也应该是个list,因为key可以不止一个。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值