zoukankan      html  css  js  c++  java
  • 同构字符串(力扣第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;
        }
  • 相关阅读:
    2020年寒假假期总结0210
    2020年寒假假期总结0209
    2020年寒假假期总结0208
    2020年寒假假期总结0207
    2020年寒假假期总结0206
    yolo-v4:Optimal Speed and Accuracy of Object Detection解析
    Docker 练习
    tensorflow2.0 GPU版本镜像文件
    flink项目实战
    高等数理统计知识点
  • 原文地址:https://www.cnblogs.com/yxym2016/p/13971642.html
Copyright © 2011-2022 走看看