LeetCode—同构字符串(哈希表和第三方对比法)

同构字符串(简单)

2020年5月28日

题目来源:力扣

在这里插入图片描述

解题

哈希表

因为s和t的长度一样,所以可以采用哈希表记录出现过的字符key与其配对的字符value,如果再出现key,判断value是否跟之前一样,不一样返回false;如果key是第一次出现,判断之前有没有key转化成这个value,有的话就返回false。

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

在这里插入图片描述

第三方对比法
我乱起的名字,见怪莫怪

打个比方,一个人说中文,一个人说日语,都把他们说的翻译成英语,那就知道他们说的是不是一个意思了。

回归题目,如果s为"add",翻译成122;t为"egg",也翻译成122,那就匹配上了。

用两个数组分别对应s、t的字符映射,每次都同时进行用i值进行记录;如果出现s、t的字符映射不同,就说明不同构。

class Solution {
    public boolean isIsomorphic(String s, String t) {
        int[] smap=new int[128];
        int[] tmap=new int[128];
        for(int i=0;i<s.length();i++){
            if(smap[s.charAt(i)]!=tmap[t.charAt(i)]){
                return false;
            }
            smap[s.charAt(i)]=i+1;
            tmap[t.charAt(i)]=i+1;
        }
        return true;
    }
}

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值