Leetcode刷题笔记——数据结构(哈希表应用:哈希映射)

1. 同构字符串

原题:
在这里插入图片描述

思路1

可以用哈希映射来做。将字符串s和t同时对比,假设当前遇到的字符分别是c1和c2,
看一下哈希映射里面是否有c1,如果有,则看一下c1和c2是否相对应,如果不对应,则返回false。
如果哈希映射里面没有c1,则将(c1,c2)加到哈希映射中。
注意:对于这道题,我们只需要验证 s - > t 和 t -> s 两个方向即可。如果验证一个方向,是不可以的。

举个例子,s = ab, t = cc,如果单看 s -> t ,那么 a -> c, b -> c 是没有问题的。

必须再验证 t -> s,此时,c -> a, c -> b,一个字母对应了多个字母,所以不是同构的
所以主函数中应该把两个字符串的两种顺序都判断一下。
上代码:

class Solution {
    public boolean isIsomorphic(String s, String t) {
        return yanzheng(s,t)&&yanzheng(t,s);
        
    }
    public boolean yanzheng(String s,String t){
        Map<Character,Character> map=new HashMap<>();
        for(int i=0;i<s.length();i++){
            char c1=s.charAt(i);
            char c2=t.charAt(i);
            if(map.containsKey(c1)){
                if(map.get(c1)!=c2)
                    return false;
            }
            else{
                map.put(c1,c2);
            }
        }
        return true;
    }
}
思路2:

建立第三方对比机制,例如,一个汉语的人和一个说法语的人交流不畅,两个人可以把汉语翻译成英语,法语翻译成英语来进行交流,
所以,可以将字母换成按出场的顺序和次数换成数字,例如,add为122,egg为122,二者同构;
adddss是122233,stttqq是122233,二者同构。
上代码:

class Solution {
    public boolean isIsomorphic(String s, String t) {
        return yanzheng(s).equals(yanzheng(t));
        
    }
    public String yanzheng(String s){
        int [] map=new int[128];
        StringBuilder sb=new StringBuilder();
        int count=1;
        for(int i=0;i<s.length();i++){
            char c=s.charAt(i);
            if(map[c]==0){
                map[c]=count;
                count++;
            }
            sb.append(map[c]);
        }
        return sb.toString();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值