LeetCode题练习与总结:同构字符串--205

2024-08-24 14:28

本文主要是介绍LeetCode题练习与总结:同构字符串--205,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、题目描述

给定两个字符串 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 * 10^4
  • t.length == s.length
  • s 和 t 由任意有效的 ASCII 字符组成

二、解题思路

  1. 首先检查两个字符串的长度是否相等,如果不相等,直接返回false。
  2. 创建两个HashMap,分别用于存储s到t的映射关系和t到s的映射关系。
  3. 遍历字符串s和t的每个字符,对于s中的每个字符,检查其在HashMap中的映射是否为t中对应的字符,如果不是,则返回false。
  4. 同样,对于t中的每个字符,检查其在另一个HashMap中的映射是否为s中对应的字符,如果不是,则返回false。
  5. 如果上述步骤都通过,则说明两个字符串是同构的,返回true。

三、具体代码

import java.util.HashMap;
import java.util.Map;class Solution {public boolean isIsomorphic(String s, String t) {if (s.length() != t.length()) {return false;}Map<Character, Character> mapSToT = new HashMap<>();Map<Character, Character> mapTToS = new HashMap<>();for (int i = 0; i < s.length(); i++) {char sChar = s.charAt(i);char tChar = t.charAt(i);// 检查s到t的映射if (mapSToT.containsKey(sChar)) {if (mapSToT.get(sChar) != tChar) {return false;}} else {mapSToT.put(sChar, tChar);}// 检查t到s的映射if (mapTToS.containsKey(tChar)) {if (mapTToS.get(tChar) != sChar) {return false;}} else {mapTToS.put(tChar, sChar);}}return true;}
}

四、时间复杂度和空间复杂度

1. 时间复杂度
  • 首先检查两个字符串的长度是否相等,这是一个O(1)的操作,因为字符串的长度属性是预先计算好的。
  • 接下来是一个for循环,它遍历字符串s和t的每个字符,循环的次数为字符串的长度n。
  • 在循环内部,我们执行了常数时间的操作,包括:
    • 检查字符是否在HashMap中(O(1))。
    • 获取HashMap中的值(O(1))。
    • 将键值对插入到HashMap中(O(1))。

由于HashMap的插入和查找操作的平均时间复杂度是O(1),因此整个for循环的时间复杂度是O(n),其中n是字符串的长度。

综上所述,整个函数的时间复杂度是O(n)。

2. 空间复杂度
  • 我们使用了两个HashMap,mapSToT和mapTToS,来存储字符之间的映射关系。
  • 在最坏的情况下,如果字符串s和t中所有的字符都是唯一的,那么每个HashMap中将会存储n个键值对,其中n是字符串的长度。
  • 因此,两个HashMap总共需要O(n)的空间。

综上所述,整个函数的空间复杂度是O(n)。

五、总结知识点

  • 类定义 (class 关键字):

    • 定义了一个名为 Solution 的类。
  • 方法定义 (public boolean isIsomorphic(String s, String t)):

    • 定义了一个公共方法 isIsomorphic,它接受两个字符串参数 s 和 t,并返回一个布尔值。
  • 条件语句 (if):

    • 使用 if 语句来检查两个字符串的长度是否相等。
  • 数据结构 - HashMap (import java.util.HashMap;):

    • 导入了 HashMap 类,用于创建散列表来存储键值对。
    • 使用 HashMap 来存储字符之间的映射关系。
  • 循环结构 (for 循环):

    • 使用 for 循环来遍历字符串中的每个字符。
  • 字符操作 (char sChar = s.charAt(i);):

    • 使用 charAt 方法来获取字符串中指定位置的字符。
  • HashMap 操作:

    • 使用 containsKey 方法检查 HashMap 中是否包含特定的键。
    • 使用 get 方法从 HashMap 中获取与键相关联的值。
    • 使用 put 方法将键值对插入到 HashMap 中。
  • 逻辑运算 (return false;return true;):

    • 根据条件判断的结果返回布尔值 true 或 false
  • 字符串长度属性 (s.length()):

    • 使用字符串的 length 属性来获取字符串的长度。
  • 变量声明和初始化 (Map<Character, Character> mapSToT = new HashMap<>();):

    • 声明并初始化两个 HashMap 变量,用于存储字符映射关系。

以上就是解决这个问题的详细步骤,希望能够为各位提供启发和帮助。

这篇关于LeetCode题练习与总结:同构字符串--205的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1102733

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

哈希leetcode-1

目录 1前言 2.例题  2.1两数之和 2.2判断是否互为字符重排 2.3存在重复元素1 2.4存在重复元素2 2.5字母异位词分组 1前言 哈希表主要是适合于快速查找某个元素(O(1)) 当我们要频繁的查找某个元素,第一哈希表O(1),第二,二分O(log n) 一般可以分为语言自带的容器哈希和用数组模拟的简易哈希。 最简单的比如数组模拟字符存储,只要开26个c

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

二分最大匹配总结

HDU 2444  黑白染色 ,二分图判定 const int maxn = 208 ;vector<int> g[maxn] ;int n ;bool vis[maxn] ;int match[maxn] ;;int color[maxn] ;int setcolor(int u , int c){color[u] = c ;for(vector<int>::iter

整数Hash散列总结

方法:    step1  :线性探测  step2 散列   当 h(k)位置已经存储有元素的时候,依次探查(h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中,S为 数组长度。 HDU 1496   a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 。 x在 [-100,100] 解的个数  const int MaxN = 3000

状态dp总结

zoj 3631  N 个数中选若干数和(只能选一次)<=M 的最大值 const int Max_N = 38 ;int a[1<<16] , b[1<<16] , x[Max_N] , e[Max_N] ;void GetNum(int g[] , int n , int s[] , int &m){ int i , j , t ;m = 0 ;for(i = 0 ;

RabbitMQ练习(AMQP 0-9-1 Overview)

1、What is AMQP 0-9-1 AMQP 0-9-1(高级消息队列协议)是一种网络协议,它允许遵从该协议的客户端(Publisher或者Consumer)应用程序与遵从该协议的消息中间件代理(Broker,如RabbitMQ)进行通信。 AMQP 0-9-1模型的核心概念包括消息发布者(producers/publisher)、消息(messages)、交换机(exchanges)、

leetcode-24Swap Nodes in Pairs

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode swapPairs(L

leetcode-23Merge k Sorted Lists

带头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val = x; }* }*/public class Solution {public ListNode mergeKLists