string - 同构字符串

标签 string data-structures hashmap set

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

如果 s 中的字符可以替换为 t,则两个字符串是同构的。

所有出现的字符都必须替换为另一个字符,同时保留字符的顺序。没有两个字符可以映射到同一个字符,但一个字符可以映射到它自己。

例如,
给定“egg”、“add”,返回true。

给定“foo”、“bar”,返回false。

给定“论文”、“标题”,返回真。

笔记:
您可以假设 s 和 t 的长度相同。

我有这个解决方案,但它花费了太多时间。
任何好的解决方案将不胜感激

   public boolean isIsomorphic(String s, String t) {
        String resString1="",resString2="";
            HashMap<Character,Integer> hashmapS = new HashMap(); 
            HashMap<Character,Integer> hashmapT = new HashMap(); 
            boolean flag = false;
            for(int i = 0;i<s.length();i++)
            {
              char chS = s.charAt(i);
              char chT = t.charAt(i);
              if(hashmapS.containsKey(chS))
              {
                  resString1 = resString1 + hashmapS.get(chS);
              }
              else
              {
                  resString1 = resString1 + i; 
                  hashmapS.put(chS, i);
              }
              if(hashmapT.containsKey(chT))
              {
                  resString2 = resString2 + hashmapT.get(chT);
              }
              else
              {
                  resString2 = resString2 + i; 
                  hashmapT.put(chT, i);
              }
            }
           if(resString1.equals(resString2))
               return true;
           else
               return false;
    }

最佳答案

/* 时间复杂度 = O(n)*/

public static boolean isIsomorphic (String s1 , String s2){

    if (s1 == null || s2 == null){
        throw new IllegalArgumentException();
    }

    if (s1.length() != s2.length()){
        return false;
    }

    HashMap<Character, Character> map = new HashMap<>();

    for (int i = 0 ; i < s1.length(); i++){

        if (!map.containsKey(s1.charAt(i))){

            if(map.containsValue(s2.charAt(i))){

                return false;
            }           

            else{
                map.put(s1.charAt(i), s2.charAt(i));
            }           
        }
        else{
            if( map.get(s1.charAt(i)) != s2.charAt(i)){
                return false;                   
            }               
        }           
    }

    return true;        
}

关于string - 同构字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31086447/

相关文章:

javascript - 在 JavaScript 中展平两个日期范围数组?

performance - 在小于 O(n^2) 的时间内在 2D 平面中找到距离最小的给定点集中的两个点

php - 在字符串中查找第一个大写字符的最快方法

ios - 检查字符串中是否存在电话号码

c++ - 标识符 int 不是 struct SOCKET_LOG_DATA 的直接成员

java - 添加新的键值对替换 Java HashMap 中的所有值

java - 迭代时比较 HashMap 元素的优化

java.util.ConcurrentModificationException,但我正在迭代副本,而不是正在修改的集合

java - 拆分字符串多种模式

java - 根据 If 语句切换变量