广告
返回顶部
首页 > 资讯 > 后端开发 > GO >GoJava算法之同构字符串示例详解
  • 195
分享到

GoJava算法之同构字符串示例详解

2024-04-02 19:04:59 195人浏览 八月长安
摘要

目录同构字符串方法一:哈希表(Java)方法一:哈希表(Go)同构字符串 给定两个字符串 s 和 t ,判断它们是否是同构的。 如果 

同构字符串

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

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

每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。

  • 示例 1:

输入:s = "egg", t = "add"

输出:true

  • 示例 2:

输入:s = "foo", t = "bar"

输出:false

  • 示例 3:

输入:s = "paper", t = "title"

输出:true  

提示:

1 <= s.length <= 5 * 104

t.length == s.length

s 和 t 由任意有效的 ASCII 字符组成

方法一:哈希表(Java)

此题需要我们判断 s 和 t 每个位置上的字符是否都一一对应,即 s 的任意一个字符被 t 中唯一的字符对应,同时 t 的任意一个字符被 s 中唯一的字符对应。这也被称为「双射」的关系。

以示例 2 为例,t 中的字符 a 和 r 虽然有唯一的映射 o,但对于 s 中的字符 o 来说其存在两个映射 {a,r},故不满足条件。

因此,我们维护两张哈希表,第一张哈希表 s2t 以 s 中字符为键,映射至 t 的字符为值,第二张哈希表 t2s 以 t 中字符为键,映射至 s 的字符为值。

class Solution {
    public boolean isIsomorphic(String s, String t) {
        Map<Character, Character> s2t = new HashMap<Character, Character>();
        Map<Character, Character> t2s = new HashMap<Character, Character>();
        int len = s.length();
        for (int i = 0; i < len; ++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;
    }
}

时间复杂度:O(N)

空间复杂度:O(1)

方法一:哈希表(Go)

具体的方法思路已经在上文中表述,具体详情请看上文内容。

方法思路:

  • 定义两个map容器用于存储两个字符串的映射关系map_s、map_t
    • map_s:以 s 中字符为键,映射至 t 的字符为值
    • map_t: 以 t 中字符为键,映射至 s 的字符为值
  • 遍历字符串(两个字符串长度相等同时遍历)
  • 不断更新两张哈希表,如果出现冲突时说明两个字符串无法构成同构,返回 false。
  • 冲突定义:即当前下标 index 对应的字符 map_s[index] 已经存在映射且不为 t[index] 或当前下标 index 对应的字符map_t[index] 已经存在映射且不为 s[index]也就是代码中的if判断条件
func isIsomorphic(s, t string) bool {
    s2t := map[byte]byte{}
    t2s := map[byte]byte{}
    for i := range s {
        x, y := s[i], t[i]
        if s2t[x] > 0 && s2t[x] != y || t2s[y] > 0 && t2s[y] != x {
            return false
        }
        s2t[x] = y
        t2s[y] = x
    }
    return true
}

时间复杂度:O(N)

空间复杂度:O(1)

以上就是Go Java算法之同构字符串示例详解的详细内容,更多关于Go Java算法同构字符串的资料请关注编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: GoJava算法之同构字符串示例详解

本文链接: https://www.lsjlt.com/news/121030.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • GoJava算法之同构字符串示例详解
    目录同构字符串方法一:哈希表(Java)方法一:哈希表(Go)同构字符串 给定两个字符串 s 和 t ,判断它们是否是同构的。 如果 ...
    99+
    2022-11-11
  • GoJava算法之找不同示例详解
    目录找不同方法一:计数(Java)方法二:求和(Go)找不同 给定两个字符串 s 和 t ,它们只包含小写字母。 字符串 t 由字符串 s 随机重排,然后在随机位...
    99+
    2022-11-13
  • GoJava算法之字符串中第一个唯一字符详解
    目录字符串中第一个唯一字符方法一:哈希表(Java)方法二:队列(Go)字符串中第一个唯一字符 给定一个字符串 s ,找到 它的第一个不重复的字符,并返回它的索引...
    99+
    2022-11-13
  • GoJava算法之K个重复字符最长子串详解
    目录至少有K个重复字符的最长子串方法一:分治(Java)方法二:滑动窗口(go)至少有K个重复字符的最长子串 给你一个字符串 s 和一个整数 k ,请你找出 s 中的最长子串,&nb...
    99+
    2022-11-13
  • GoJava算法之累加数示例详解
    目录累加数方法一:穷举法(java)方法二:深度优先遍历(go)累加数 累加数 是一个字符串,组成它的数字可以形成累加序列。 一个有效的 累加序列 必须 至少 包含 3 个数。除了最...
    99+
    2022-11-11
  • Go Java 算法之字符串解码示例详解
    目录字符串解码方法一:栈(Java)方法二:递归(Go)字符串解码 给定一个经过编码的字符串,返回它解码后的字符串。 编码规则为: k[encoded_string],表示其中方括号...
    99+
    2022-11-11
  • Go Java算法之交错字符串示例详解
    目录交错字符串方法一:动态规划(Java)方法一:动态规划(GO)交错字符串 给定三个字符串 s1、s2、s3,请你帮忙验证 s3 是否是由 ...
    99+
    2022-11-13
    Go Java算法交错字符串 Go算法 Java算法
  • Gojava算法之括号生成示例详解
    目录括号生成方法一:深度优先遍历(java)方法一:深度优先遍历(go)括号生成 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组...
    99+
    2022-11-11
  • GoJava算法之单词规律示例详解
    目录单词规律方法一:哈希表(Java)方法一:哈希表(GO)单词规律 给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同...
    99+
    2022-11-11
  • GoJava算法之从英文中重建数字示例详解
    目录从英文中重建数字Java实现Go实现从英文中重建数字 给你一个字符串 s ,其中包含字母顺序打乱的用英文单词表示的若干数字(0-9)。按 升序 返回原始的数字。 示例 1: 输入...
    99+
    2022-11-13
    Go Java算法英文重建数字 Go Java算法
  • GoJava算法之Excel表列名称示例详解
    目录Excel表列名称方法一:数学(Java)方法一:数学(Go)Excel表列名称 给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。 ...
    99+
    2022-11-11
  • GoJava算法之迷你语法分析器示例详解
    目录迷你语法分析器方法一:深度优先遍历(Java)方法二:栈(Go)迷你语法分析器 给定一个字符串 s 表示一个整数嵌套列表,实现一个解析它的语法分析器并返回解析的结果 N...
    99+
    2022-11-13
  • GoJava算法之外观数列实现方法示例详解
    目录外观数列方法一:遍历生成(Java)方法二:递归(Go)外观数列 给定一个正整数 n ,输出外观数列的第 n 项。 「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都...
    99+
    2022-11-13
    Go Java算法外观数列 Go Java算法
  • GoJava算法之简化路径实例详解
    目录简化路径方法一:栈(Java)方法二:标准库(Go)简化路径 给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 '/'...
    99+
    2022-11-13
  • GoJava算法之二叉树的所有路径示例详解
    目录二叉树的所有路径方法一:深度优先遍历搜索(Java)方法二:广度优先遍历(Go)二叉树的所有路径 给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的...
    99+
    2022-11-11
  • C语言数据结构与算法之字符串详解
    目录串的定义串的比较 串的抽象数据类型串的初始化相关定义初始化定长类初始化串的堆式顺序存储结构(Heap)初始化堆字符串 赋值操作比较两个堆字符串的大小 串的定义...
    99+
    2022-11-12
  • GoJava算法最大单词长度乘积示例详解
    目录最大单词长度乘积方法一:位运算(java)方法一:位运算(go)最大单词长度乘积 给你一个字符串数组 words ,找出并返回 length(words[i]) * l...
    99+
    2022-11-11
  • C语言字符串压缩之ZSTD算法详解
    目录前言一、zstd压缩与解压二、ZSTD压缩与解压性能探索三、zstd的高级用法四、总结前言 最近项目上有大量的字符串数据需要存储到内存,并且需要储存至一定时间,于是自然而然的想到...
    99+
    2022-11-13
    C语言字符串压缩 C语言 ZSTD算法 C语言 ZSTD 字符串压缩
  • Java字符串常量池示例详解
    为什么会有常量池的概念? 不知道小伙伴们是否有思考过这个问题? 没有思考也无所谓,小编在这里类比一下,大家就会清晰了。什么是池? 我们听的最多的池,应该是数据...
    99+
    2022-11-12
  • ES6z2数组解构和字符串解构的示例分析
    这篇文章将为大家详细讲解有关ES6z2数组解构和字符串解构的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体如下:ES6 允许按照一定模式,从数组和对象中提取值...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作