同构字符串[简单]

这篇具有很好参考价值的文章主要介绍了同构字符串[简单]。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

优质博文:IT-BLOG-CN

一、题目

给定两个字符串st,判断它们是否是同构的。如果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
st由任意有效的ASCII字符组成

二、代码

思路: 判断st每个位置上的字符是否都一一对应,即s的任意一个字符被t中唯一的字符对应,同时t的任意一个字符被s中唯一的字符对应。这也被称为「双射」的关系。以示例2为例,t中的字符ar虽然有唯一的映射o,但对于s中的字符o来说其存在两个映射{a,r},故不满足条件。

因此,我们维护两张哈希表,第一张哈希表s2ts中字符为键,映射至t的字符为值,第二张哈希表t2st中字符为键,映射至s的字符为值。从左至右遍历两个字符串的字符,不断更新两张哈希表,如果出现冲突(即当前下标index对应的字符s[index]已经存在映射且不为t[index]或当前下标index对应的字符t[index]已经存在映射且不为s[index]时说明两个字符串无法构成同构,返回false。如果遍历结束没有出现冲突,则表明两个字符串是同构的,返回true即可。

class Solution {
    public boolean isIsomorphic(String s, String t) {
        // 创建2个hashMap,key为s的字符,value为t字符,另一个正好相反
        if (s == null || t == null || s.length() != t.length()) {
            return false;
        }
        Map<Character,Character> s2t = new HashMap();
        Map<Character,Character> t2s = new HashMap();
        for (int i = 0; i < s.length(); i++) {
            Character si = s.charAt(i);
            Character ti = t.charAt(i);
            if ((s2t.containsKey(si) && !ti.equals(s2t.get(si))) || (t2s.containsKey(ti) && !si.equals(t2s.get(ti)))) {
                return false;
            }
            s2t.put(si,t.charAt(i));
            t2s.put(ti,s.charAt(i));
        }
        return true;
    }
}

时间复杂度: O(n)其中n为字符串的长度。我们只需同时遍历一遍字符串st即可。
空间复杂度: O(∣Σ∣)其中Σ是字符串的字符集。哈希表存储字符的空间取决于字符串的字符集大小,最坏情况下每个字符均不相同,需要O(∣Σ∣)的空间。文章来源地址https://www.toymoban.com/news/detail-739219.html

到了这里,关于同构字符串[简单]的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【JavaScript数据结构与算法】字符串类(反转字符串中的单词)

    个人简介 👀 个人主页: 前端杂货铺 🙋‍♂️ 学习方向: 主攻前端方向,也会涉及到服务端(Node.js) 📃 个人状态: 在校大学生一枚,已拿多个前端 offer(秋招) 🚀 未来打算: 为中国的工业软件事业效力 n 年 🥇 推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2/3项目

    2023年04月09日
    浏览(89)
  • 【数据结构】数组和字符串(十四):字符串匹配1:朴素的模式匹配算法(StringMatching)

      字符串(String)是由零个或多个字符(char)顺序排列组成的有限序列,简称为串。例如 “good morning”就是由12个字符构成的一个字符串。一般把字符串记作: S = ′ ′ a 0 a 1 … a n − 1 ′ ′ S=\\\'\\\'a_{0} a_{1}…a_{n-1}\\\'\\\' S = ′′ a 0 ​ a 1 ​ … a n − 1 ′′ ​   其中S是串名,引号中

    2024年02月05日
    浏览(72)
  • 数据结构--字符串的KMP算法

    朴素模式匹配算法: 一旦发现当前这个子串中某个字符不匹配,就只能转而匹配下一个子串(从头开始) 但我们可以知道: 不匹配的字符之前,一定是和模式串一致的 color{red}不匹配的字符之前,一定是和模式串一致的 不匹配的字符之前,一定是和模式串一致的 我们可以利用

    2024年02月12日
    浏览(61)
  • 数据结构与算法--字符串(单选题)

    1、令s=\\\"abcabaa\\\",则它的特征向量next函数值和优化特征向量nextval函数值为(下标从0开始): A.next={0,1,1,1,2,3,2},nextval={0,1,1,0,1,2,1} B.next={-1,0,0,-1,0,2,1},nextval={-1,0,0,0,1,2,1} C.next={-1,0,0,0,1,2,1},nextval={-1,0,0,-1,0,2,1} D.next={-1,0,0,0,1,2,1},nextval={-1,0,0,0,1,2,1} C 规定next[1]=0 s[2]前,“a”,next[2]=重合

    2024年02月07日
    浏览(46)
  • 数据结构与算法之字符串: Leetcode 557. 反转字符串中的单词 III (Typescript版)

    翻转字符串中的单词 III https://leetcode.cn/problems/reverse-words-in-a-string-iii/ 描述 给定一个字符串 s ,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。 示例 1: 示例 2: 提示: 1 = s.length = 5 * 1 0 4 10^4 1 0 4 s 包含可打印的 ASCII 字符。 s 不包含任何开头或

    2024年02月01日
    浏览(74)
  • 【Redis】关于Redis数据结构简单动态字符串(SDS)的一些杂记

    推荐几篇关于SDS数据结构讲解较为详细的文章: 一、简单动态字符串 — Redis 设计与实现 (redisbook.readthedocs.io) 二、深入理解Redis之简单动态字符串 - itbsl - 博客园 (cnblogs.com) 三、Redis内部数据结构详解(2)——sds - 铁蕾的个人博客 (zhangtielei.com) 四、简单动态字符串 — Redis 设计与

    2023年04月14日
    浏览(42)
  • 【数据结构】字符串匹配|BF算法|KMP算法|next数组的优化

    字符串匹配算法是在实际工程中经常遇到的问题,也是各大公司笔试面试的常考题目,本文主要介绍BF算法(最好想到的算法,也最好实现)和KMP算法(最经典的) BF算法,即暴力(Brute Force)算法,是普通的模式匹配算法,BF算法的思想就是将目标S的第一个字符与模式串T的第一

    2024年02月04日
    浏览(53)
  • 【JavaScript数据结构与算法】字符串类(计算二进制子串)

    个人简介 👀 个人主页: 前端杂货铺 🙋‍♂️ 学习方向: 主攻前端方向,也会涉及到服务端(Node.js) 📃 个人状态: 在校大学生一枚,已拿多个前端 offer(秋招) 🚀 未来打算: 为中国的工业软件事业效力 n 年 🥇 推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2/3项目

    2024年02月05日
    浏览(42)
  • 数据结构课设:基于字符串模式匹配算法的病毒感染检测问题

    1.掌握字符串的顺序存储表示方法。 2.掌握字符串模式匹配算法BF算法或KMP算法的实现。 问题描述 医学研究者最近发现了某些新病毒,通过对这些病毒的分析,得知它们的DNA序列都是环状的。现在研究者已收集了大量的病毒DNA和人的DNA数据,想快速检测出这些人是否感染了

    2023年04月27日
    浏览(48)
  • 数据结构与算法之字符串: Leetcode 20. 有效的括号 (Typescript版)

    有效的括号 https://leetcode.cn/problems/valid-parentheses/ 描述 给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相

    2024年02月01日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包