当前位置: 首页 > article >正文

leetcode 205.同构字符串

思路:哈希表

这里用了两个哈希表。至于为什么,且看下面的思路:

首先我们的题目要求我们每一个字母映射一个对应的字母,并且每个字母映射的字母不能一样,也就是严格的一一对应。

关于映射,自然就会想到用哈希表来存储用。但是,我们要知道,哈希表的区分只是对于键的去重,而和元素的去重没有关系,所以我们开始在尝试直接用哈希表映射的时候,不同的字母可以映射一样的字母,这是和题目要求不匹配的。

所以我们需要考虑被映射的字母怎么处理。一般的处理方法就是做上标记,让程序知道这个字母已经被别的字母映射过了。所以我们可以再创建一个哈希表用来标记这个字母的状态。

注意:这里说的字母是不仅仅包括26个字母,大家不要误会。有人会想到用数组来标记,很显然不合理。用数组的话你需要开一个能包括所有ASCII码的数组大小,这对于空间开销有点大了,所以用哈希表会合算一点。

还有一点就是,我们被标记的字母,再次遍历到有字母要映射它时,是不会放到哈希表里面去的,除了判断映射的字母是否和t字符串中的字符一致以外,还需要判断这个字符是否存在这个哈希表映射中。

class Solution {
    public boolean isIsomorphic(String s, String t) {
        if(s.length()!=t.length())
        return false;
        Map<Character,Character>m=new HashMap<>();
        Map<Character,Integer>count=new HashMap<>();
        for(int i=0;i<s.length();i++){
            if(!count.containsKey(t.charAt(i))){
                count.put(t.charAt(i),1);
                m.put(s.charAt(i),t.charAt(i));
            }
        }
        for(int i=0;i<s.length();i++){
            if(!m.containsKey(s.charAt(i))||m.get(s.charAt(i))!=t.charAt(i)){
                return false;
            }
        }
        return true;
    }
}


http://www.kler.cn/a/317501.html

相关文章:

  • 基于yolov8、yolov5的鱼类检测识别系统(含UI界面、训练好的模型、Python代码、数据集)
  • 浪潮信息“源”Embedding模型登顶MTEB榜单第一名
  • CSS回顾-长度单位汇总详解
  • [Linux] Linux信号捕捉
  • 代码修改材质参数
  • redis7.x源码分析:(1) sds动态字符串
  • 如何快速上手一个Github的开源项目
  • C++ 9.24
  • 如何使用ssm实现疫苗预约系统+vue
  • 使用synchronized锁住字符串
  • Shire 智能体市场:IDE 一键安装多智能体,协同打造集体智慧 Copilot
  • 迎国庆-为祖国庆生python、Java、C各显神通
  • 【Python】数据可视化之分布图
  • 联影医疗嵌入式面试题及参考答案(3万字长文)
  • wpf,工具栏上,最小化按钮的实现
  • ubuntu 系统下,安装stable diffusion解决下载速度慢的问题
  • (十五)、把自己的镜像推送到 DockerHub
  • 数模方法论-无约束问题求解
  • 科龙睡眠空调小耳朵LF上线,“亲身”答疑空调一天多少度电
  • 【二十五】【QT开发应用】无边窗窗口鼠标拖动窗口移动,重写mousePressEvent,mouseMoveEvent函数
  • 专属文生图助手——SD3+ComfyUI文生图部署步骤
  • 安卓Settings值原理源码剖析存储最大的字符数量是多少?
  • css设置动态数组渲染及中间线平均分开显示
  • IMX6UL开发板中断实验(三)
  • 深度学习02-pytorch-01-张量的创建
  • 使用python-pptx拆分PPT文档:将一个PPT文件拆分成多个小的PPT文件