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

leetcode刷题日记——同构字符串

[ 题目描述 ]:
在这里插入图片描述
[ 思路 ]:

  • 题目要求判断 s 和 t 是否为同构字符串,即 s 中每个字符与 t 中对应位置的字符形成一个映射关系,且只能是一对一映射
  • ASCII(American Standard Code for Information Interchange)码是最基础的字符编码标准,用7位二进制数(共128个字符)表示英文字母、数字、符号和控制字符。
  • 其中 0-31 是控制字符,32-126 是可打印字符,127 是删除控制符(DEL),128-255 是扩展 ASCII
  • 那么其中有效的 ASCII 字符是 32-126,总共有95个有有效字符
  • 那么可以申请一个 95 大小的字符数组用作存储映射关系的映射表,下标表示其自身的值,存储的值表示在映射到数组 t 中的值
  • 每遇见一个映射表中不存在的映射关系,添加映射
  • 当映射存在,且映射关系与映射表中不同时,说明不是同构字符
  • 然后再从 t → s 执行一遍,来检测同一字符是否有多重映射
  • 运行如下
    在这里插入图片描述
bool isIsomorphic(char* s, char* t) {int s_len=strlen(s),t_len=strlen(t);if(s_len!=t_len) return false;char s_t[95]={};char t_s[95]={};for(int i=0;i<s_len;i++){if(s_t[s[i]-32]==NULL){s_t[s[i]-32]=t[i];}else{if(s_t[s[i]-32]!=t[i]) return false;}if(t_s[t[i]-32]==NULL){t_s[t[i]-32]=s[i];}else{if(t_s[t[i]-32]!=s[i]) return false;}}return true;
}

[ 官方题解 ]:

  • 方法一:哈希表,通过 hash 表来实现存储关系映射
struct HashTable {char key;char val;UT_hash_handle hh;
};bool isIsomorphic(char* s, char* t) {struct HashTable* s2t = NULL;struct HashTable* t2s = NULL;int len = strlen(s);for (int i = 0; i < len; ++i) {char x = s[i], y = t[i];struct HashTable *tmp1, *tmp2;HASH_FIND(hh, s2t, &x, sizeof(char), tmp1);HASH_FIND(hh, t2s, &y, sizeof(char), tmp2);if (tmp1 != NULL) {if (tmp1->val != y) {return false;}} else {tmp1 = malloc(sizeof(struct HashTable));tmp1->key = x;tmp1->val = y;HASH_ADD(hh, s2t, key, sizeof(char), tmp1);}if (tmp2 != NULL) {if (tmp2->val != x) {return false;}} else {tmp2 = malloc(sizeof(struct HashTable));tmp2->key = y;tmp2->val = x;HASH_ADD(hh, t2s, key, sizeof(char), tmp2);}}return true;
}
http://www.xdnf.cn/news/21529.html

相关文章:

  • 北京SMT贴片厂精密制造关键工艺
  • MySQL触发器和函数的详细示例
  • FairMOT算法详解
  • 【AI学习】OpenAI:《A practical guide to building agents》(中文介绍与原文)
  • 关于嵌入式系统的知识课堂(二)
  • Unity粒子特效打包后不显示
  • 【天外之物】叉乘(向量积)的行列式表示方法
  • 前端如何构建跨平台可复用的业务逻辑层(Web、App、小程序)
  • LIMS引领综合质检中心数字化变革,赋能质量强国战略
  • 前端:uniapp框架中<scroll-view>如何控制元素进行局部滚动
  • 继承的了解与学习
  • 安装多个DevEco Studio版本,如何才能保证各个版本不冲突?
  • 【ELF2学习板】Ne10进行FFT测试
  • 【T2I】DreamFuse: Adaptive Image Fusion with Diffusion Transformer
  • AOP基本概念
  • 【工具变量】地市农业播种面积及粮食产量等21个相关指标(2013-2022年)
  • 打造搜索神功:Express 路由中的关键词探查之道
  • 【linux学习】 Redhat9.5安装
  • vue+flask+CNN电影推荐系统
  • 从零基础深入学习的语音信号处理系统
  • 大模型应用_AutoGPT
  • 折扣电影票api对接详细指南,如何对接?
  • 颚式破碎机的设计
  • 【深度学习—李宏毅教程笔记】Self-attention
  • 【从零实现高并发内存池】申请、释放内存过程联调测试 与 大于256KB内存申请全攻略
  • 一本通 2063:【例1.4】牛吃牧草 1005:地球人口承载力估计
  • FPGA学习——DE2-115开发板上设计波形发生器
  • Sigma-Delta ADC(ΣΔ-ADC)中的量化器简介
  • 解决Windows安全中心显示空白页面
  • L2-002 链表去重