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

leetcode刷题日记:205. Isomorphic Strings(同构字符串)

205. Isomorphic Strings(同构字符串)

对于同构字符串来说也就是对于字符串s与字符串t,对于 s [ i ] s[i] s[i]可以映射到 t [ i ] t[i] t[i],同时对于任意 s [ k ] = s [ i ] s[k]=s[i] s[k]=s[i]都有 s [ k ] s[k] s[k]映射到 t [ k ] t[k] t[k],则 t [ k ] = t [ i ] t[k]=t[i] t[k]=t[i]则说明这是一个同构字符串。
我们已经明白了映射规则,接下来我们就具体来分析下如何判断是否为同构字符串。
在ASCII码对照表中一共有128个字符,也就是说对于题目给出的字符串我们可以确定它们是这128个字符中的字符组成的,每个字符都有两种表示一种是ASCII码,一种是字符本身。
我们就可以创建一个大小为128的char类型数组f,用ASCII码 x x x作为下标,表示s中所有ASCII码为 x x x的元素 f [ x ] f[x] f[x]映射为t中的对应位置的元素。
映射如图所示:
在这里插入图片描述
之后每一次添加映射都要对应的映射f[s[i]]是否已经存在,如果存在是否与当前要添加的映射是否相同,如果相同则没事,不相同就说明存在一个映射到多个元素,那就不符合同构字符串的定义了。
之后我们还需要检查一下是否存在多个元素映射到同一个元素的情况存在,因为上述添加的过程在建立映射后只能保证不存在一个映射到多个的情形,但是没法避免多个元素到一个元素的情形,所以我们需要进行额外的检查。

总结

根据字符的两种表现形式我们可以建立数组描述映射。我们可以发现在遍历字符串s与t,将对应位置的元素映射关系逐一加入到f数组中,在加入的过程中如果发现映射已存在,但是映射的元素不相同,说明这两个不是同构字符串,我们返回false,一直到结束,如果s中所有元素都与t中对应位置的元素建立了映射,则我们需要检查是否存在多个s中的不同字符映射到了t中的同一个字符上,如果存在返回false,否则返回true。
至此程序结束。

bool isIsomorphic(char* s, char* t) {int length1 = strlen(s);int length2 = strlen(t);char * f = (char *)malloc(sizeof(char)*128);for(int i = 0; i < 128; i++){f[i] = 0;}if(length1==length2){for(int i = 0; i < length1; i++){if(f[s[i]]==0){f[s[i]] = t[i];}else if(f[s[i]]!=t[i]){return 0;}}for(int i = 0; i < 128; i++){for(int j = 0; j < i; j++){if(f[i]==f[j]&&f[i]!=0){return 0;}}}return 1;}return 0;
}

运行结果截图:
在这里插入图片描述

http://www.lryc.cn/news/238028.html

相关文章:

  • Autox.js和Auto.js4.1.1手机编辑器不好用我自己写了一个编辑器
  • docker logs 如何使用grep检索
  • 【教3妹学编辑-mysql】详解join(内连接、外连接、交叉连接等)
  • 云工作流 CloudFlow 重磅发布,流程式开发让云上应用构建更简单
  • 基于单片机GPS轨迹定位和里程统计系统
  • go 适配器模式
  • 蓝桥杯物联网_STM32L071_1_CubMxkeil5基础配置
  • 如果文件已经存在与git本地库中,配置gitignore能否将其从git库中删除
  • 枚举 小蓝的漆房
  • 【设计模式】行为型设计模式
  • Docker部署FLASK Unicorn并配置Nginx
  • pytorch的backward()的底层实现逻辑
  • SqlServer_idea连接问题
  • 认识.NET Aspire:高效构建云原生应用的利器
  • CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)的内部网络结构有什么区别?
  • 【CSH 入门基础 8 -- csh 中 set 与 setenv 的区别 】
  • Vue 2.0的源码构建
  • Kubernetes Gateway API 攻略:解锁集群流量服务新维度!
  • 直播间弹幕直播游戏开发教程
  • 通过AppLink把拼多多热门榜单商品同步至小红书
  • 力扣题目学习笔记(OC + Swift)
  • 20. Spring源码篇之@Lookup详解
  • 2.5计划任务远程管理
  • 光伏、储能双层优化配置接入配电网研究(附带Matlab代码)
  • 低代码服务商,中小型数字化软件服务商的新出路
  • Arcgis 日常天坑问题2——三维场景不能不能加载kml图层,着手解决这个问题
  • Ubuntu22.04 交叉编译GCC13.2.0 for Rv1126
  • 什么是EVM?以太坊EVM合约交互
  • Vue Treeselect el-tree-select 多选 只选中第三级
  • Stable Diffusion专场公开课