当前位置: 首页 > 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/news/317501.html

相关文章:

  • 如何快速上手一个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文件
  • 某yandex图标点选验证码逆向
  • 使用双向 LSTM 和 CRF 进行中文命名实体识别
  • Spring全家桶
  • 图为科技大模型一体机,智领未来社区服务
  • C++中stack类和queue类
  • vue3/Element-Plus/路由的使用
  • Flask-Migrate的使用
  • 学生宿舍管理:Spring Boot技术实现
  • 国内外动态sk5
  • react hooks--useRef