• 同构字符串(力扣第205题)


    题目:

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

    如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。

    所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。

     分析:

    需要注意的点是:

    1、s中如果某个字符是多次出现的,那么这些重复出现的字符只能被t中的出现同样次数的字符替换,否则替换完成之后,s得不到t;

    2、s中被替换字符的顺序坐标必须是和t中替换的字符顺序坐标是一致的,否则即使替换完成,通过s也得不到t;

    基于以上两点,我们同时遍历两个字符串,判断当前访问的字符,其上一次被访问的时候的在s和t中的坐标是否相同,如果不同则说明不是同构的,相同则继续向后遍历,直到两个字符串中的所有字符全部遍历完成。

    具体实现可以借助于哈希表或者通过Int数组模拟哈希(因为char字符都是有对应的数值的)

    代码实现:

    方法一:

     public boolean isIsomorphic(String s, String t) {
    
            HashMap<Character, Integer> hashMap_s = new HashMap<>();
            HashMap<Character, Integer> hashMap_t = new HashMap<>();
    
            for (int i = 0; i < s.toCharArray().length; i++) {
    
                if ( hashMap_s.get(s.charAt(i)) == null && hashMap_t.get(t.charAt(i)) == null ){
                    hashMap_s.put(s.charAt(i),i);
                    hashMap_t.put(t.charAt(i),i);
                } else if (hashMap_s.get(s.charAt(i)) != null && hashMap_t.get(t.charAt(i)) != null){
                    int last_s = hashMap_s.get(s.charAt(i));
                    int last_t = hashMap_t.get(t.charAt(i));
                    if ( last_s != last_t){
                        return false;
                    }
    
                    hashMap_s.put(s.charAt(i),i);
                    hashMap_t.put(t.charAt(i),i);
                }else {
                    return false;
                }
    
            }
    
            return true;
        }

    该方法可行,但是超时了,所以方法二更好一些。

    方法二:

        public boolean isIsomorphic2(String s,String t){
            int[] preIndexOfS = new int[256];
            int[] preIndexOfT = new int[256];
            for (int i = 0; i < s.length(); i++) {
                char sc = s.charAt(i), tc = t.charAt(i);
                if (preIndexOfS[sc] != preIndexOfT[tc]) {
                    return false;
                }
                preIndexOfS[sc] = i + 1;
                preIndexOfT[tc] = i + 1;
            }
            return true;
        }
  • 相关阅读:
    手机如何当电脑的摄像头使用
    内网穿透软件
    如何在laravel框架中使用阿里云的oss
    css position 定位详解
    laravel 速查表
    window10如何查看连接过的wifi密码
    sweetalert弹出层组件
    phpstudy安装 与phpstudy_Windows web面板安装
    程序员修炼之道读后感
    JAVA-WEB-简单的四则运算
  • 原文地址:https://www.cnblogs.com/yxym2016/p/13971642.html
Copyright © 2020-2023  润新知