同构弦

2024-03-19

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

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

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

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

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

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

笔记: 您可以假设 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;        
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

同构弦 的相关文章

  • C# 中的 String 和 string 有什么区别?

    这两者之间有什么区别 我应该使用哪一个 string s Hello world String s Hello world string https learn microsoft com en us dotnet csharp langu
  • 正则表达式:如何匹配包含重复模式的字符串?

    是否有一个正则表达式模式可以匹配包含重复模式的字符串 例如 a b c d y z 你有什么主意吗 也许您正在寻找这样的东西 这将匹配以逗号分隔的表单序列列表 where and 可以是任何字符
  • 集合的“toArray”是确定性的吗?

    显然 集合没有任何类型的排序 所以如果我这样做的话 我不能期望任何特定的排序 String string mySet toArray 然而 我面临着一个用例 我不关心字符串数组的顺序 但我确实需要这样的情况 如果两个集合彼此相等 那么 St
  • 对于基准测试和压力测试子串搜索算法有哪些好的测试用例?

    我正在尝试评估不同的子字符串搜索 ala strstr 算法和实现 并寻找一些精心设计的针和干草堆字符串 这些字符串将捕获最坏情况的性能和可能的极端情况错误 我想我可以自己解决它们 但我认为有人必须在某个地方收集大量测试用例 一些想法和对自
  • 如何获得平衡括号之间的表达式

    假设我得到以下类型的字符串 this is haha a string and it s sneaky ipsom lorem bla 我想提取最顶层括号内包含的子字符串 IE 我想获取字符串 this is haha a string a
  • 为什么Python中set的大小可以比dict大?

    为什么a的大小是set比一个大dict s set d for i in range 20 s add i d i 1 print f i 1 s sizeof d sizeof Output 17 712 624 18 712 624 1
  • 我应该如何存储不同时区事件的数据?

    这是一个概念性问题 因此这里没有代码片段 假设我创建了一个事件数据库 其中一些在纽约 一些在芝加哥 一些在凤凰城 等等 我的服务器的时区设置为纽约 在我看来 为所有这些事件创建 UNIX 时间戳时有两种选择 考虑时区 即 1 月 1 日午夜
  • Mysql 使用搜索字符串排序

    我有一个 mysql 查询 例如 select from employee where name like ani 我希望我的结果以 ani 开头排序 例如 我的结果应该是 anil anirudha rani 首先以 ani 开头 然后是
  • C/C++ 中的双向链表与多链表 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 双链表和多链表有什么区别 在 C C 程序的帮助下会更好地解释我 定义 A 多链表是一个链表 其中每个节点可以包含指向链表的多个节点的
  • 如何使用 grep 查找文件夹内的单词?

    在 Windows 中 我会进行搜索以在文件夹中查找单词 同样 我想知道某个特定单词是否出现在包含许多子目录和文件的目录中 我对 grep 语法的搜索显示我必须指定文件名 即grep string filename Now I do not
  • C++ 中的 Java HashSet 等效项

    我很好奇 C 中是否有类似于 Java HashSet 的东西 IE 一个快速查看的数据结构 因为我只会运行 contains e 在上面 同样 如果你能启发我如何做 contains 无论您提出什么数据结构 我都会非常感激 O 请不要发帖
  • 触发变量中 python 字符串的 f 字符串解析

    这个问题来自于处理jupyter magics 但可以用更简单的方式表达 给定一个字符串s the key is d key 和一本字典d key val 我们要解析该字符串 旧的方法是 format 这会引发错误 它不处理字典键 the
  • 以 null 为键的 HashMap

    How HashMap内部区分null and 0作为关键 按照这个post https stackoverflow com questions 17268212 hashcode for null key in hashmap的哈希码nu
  • 如何重构“字符串类型”代码?

    我目前正在开发一个代码库 其中有几类变量 例如数据库路径 它们简单地表示为字符串 这些 非 类型的大多数操作都在实用程序类中定义 我创建了一个新类来表示数据库 并将操作定义为实例方法 采用传统的 OOP 风格 然而 浏览大型代码库并重构它以
  • 从逗号分隔的字符串创建 html 表 javascript

    我正在尝试编写一个 Javascript 函数 该函数将文本写入 最终 创建以下 html 表 我将向它传递不同长度的参数以创建数百个表 table tr td u School u td td u Percent u td tr td S
  • 字符串等于和 == 与字符串连接[重复]

    这个问题在这里已经有答案了 我试图理解字符串连接与字符串比较的输出 需要明确的是 我有一个类使用 和 equals 来比较两个字符串 我试图将 和 equals 的输出连接到一个字符串 equals 的输出是 concats 但是 的输出是
  • GUID 的格式始终相同吗?

    GUID 你会得到类似 aaaef973 d8ce 4c92 95b4 3635bb2d42d5 总是一样吗 它总是具有以下格式吗 8 个字符 4 个字符 4 个字符 4 个字符 12 个字符 我这么问是因为我需要将不带 的 GUID 转换
  • 调用 PHP 爆炸并访问第一个元素? [复制]

    这个问题在这里已经有答案了 可能的重复 用于取消引用函数结果的 PHP 语法 https stackoverflow com questions 742764 php syntax for dereferencing function re
  • PHP检查字符串是否包含多个单词

    我在互联网上查找了一些可以做到这一点的东西 但它只能用一个词来实现 我正在尝试构建一个脚本来检测我的网站的错误用户名 如果用户名包含数组中的任何单词 则将检测到错误的用户名 这是我编写的代码 但未能运行 bad words array yo
  • Java HashSet 具有自定义相等标准? [复制]

    这个问题在这里已经有答案了 我一直在寻找类似于 Java TreeSet 在实例化时接收自定义比较器的能力 因此我不需要使用对象的默认相等 和哈希码 标准 我能想到的最接近的方法是将我的对象包装在一个私有的自定义类中 但这看起来很老套 这最

随机推荐