力扣-简答题-205. 同构字符串

1. 给定两个字符串 s 和 t ,判断它们是否是同构的。

如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。

每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。
在这里插入图片描述

2. 我的解法

将两个字符串拆分成数组t1,s1。
循环检查,用map存储检查结果
1. 检查s1[i]为key是否存在后,再检查t1[i]为value是否存在。如果不存在,则存入map,t1[i]–s1[i]
2. 检查s1[i]对应的value是否与t1[i]相等,不相等则返回false

   public static boolean isIsomorphic(String s, String t) {
        if(s.length()!=t.length()){
            return false;
        }
        String []s1=s.split("");
        String[] t1=t.split("");
        Map map1=new HashMap();
        for(int i=0;i<s1.length;i++){
//            检测key是否存在
            if(!map1.containsKey(s1[i])){
//                此处比较麻烦,遍历map检测value是否存在
                    Iterator<Map.Entry<String,String>> iterator = map1.entrySet().iterator();
                    while(iterator.hasNext()){
                        Map.Entry<String,String> item = iterator.next();
                        if(item.getValue().equals(t1[i])){
                           return false;
                        }
                    }

                map1.put(s1[i],t1[i]);
            }else{
                if(!map1.get(s1[i]).equals(t1[i])){
                    return false;
                }
            }
        }
        return true;
    }

3. 更佳解法

https://leetcode.cn/problems/isomorphic-strings/solution/tong-gou-zi-fu-chuan-by-leetcode-solutio-s6fd/
设置两张表,进行更新维护

    public static boolean isIsomorphic2(String s, String t) {
        Map <Character,Character>s2t=new HashMap<>();
        Map<Character, Character> t2s=new HashMap<>();
        for(int i=0;i<s.length();i++){
            char x=s.charAt(i),y=t.charAt(i);
            if(s2t.containsKey(x)&&s2t.get(x)!=y||
                    t2s.containsKey(y)&&t2s.get(y)!=x){
                return false;
            }
            s2t.put(x,y);
            t2s.put(y,x);
        }
        return true;
    }

4. 备注

map遍历的方法

                    Iterator<Map.Entry<String,String>> iterator = map1.entrySet().iterator();
                    while(iterator.hasNext()){
                        Map.Entry<String,String> item = iterator.next();
                        System.out.println(item.getKey());
                        System.out.println(item.getValue());
                    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值