C语言 | Leetcode C语言题解之第87题扰乱字符串

server/2024/9/18 21:00:03/ 标签: C语言, Leetcode, 题解

题目:

题解

struct HashTable {int key;int val;UT_hash_handle hh;
};void modifyHashTable(struct HashTable** hashTable, int x, int inc) {struct HashTable* tmp;HASH_FIND_INT(*hashTable, &x, tmp);if (tmp == NULL) {tmp = malloc(sizeof(struct HashTable));tmp->key = x;tmp->val = inc;HASH_ADD_INT(*hashTable, key, tmp);} else {tmp->val += inc;}
}bool checkHashTable(struct HashTable** hashTable) {struct HashTable *iter, *tmp;HASH_ITER(hh, *hashTable, iter, tmp) {if (iter->val) {return false;}}return true;
}void freeHashTable(struct HashTable** hashTable) {struct HashTable *iter, *tmp;HASH_ITER(hh, *hashTable, iter, tmp) {HASH_DEL(*hashTable, iter);free(iter);}
}bool equals(char* s1, char* s2, int i1, int i2, int len) {for (int i = 0; i < len; i++) {if (s1[i + i1] != s2[i + i2]) {return false;}}return true;
}// 记忆化搜索存储状态的数组
// -1 表示 false,1 表示 true,0 表示未计算
int memo[30][30][31];// 第一个字符串从 i1 开始,第二个字符串从 i2 开始,子串的长度为 length,是否和谐
bool dfs(char* s1, char* s2, int i1, int i2, int length) {if (memo[i1][i2][length]) {return memo[i1][i2][length] == 1;}// 判断两个子串是否相等if (equals(s1, s2, i1, i2, length)) {memo[i1][i2][length] = 1;return true;}// 判断是否存在字符 c 在两个子串中出现的次数不同struct HashTable* hashTable = NULL;for (int i = i1; i < i1 + length; ++i) {modifyHashTable(&hashTable, s1[i], 1);}for (int i = i2; i < i2 + length; ++i) {modifyHashTable(&hashTable, s2[i], -1);}if (!checkHashTable(&hashTable)) {memo[i1][i2][length] = -1;return false;}freeHashTable(&hashTable);// 枚举分割位置for (int i = 1; i < length; ++i) {// 不交换的情况if (dfs(s1, s2, i1, i2, i) && dfs(s1, s2, i1 + i, i2 + i, length - i)) {memo[i1][i2][length] = 1;return true;}// 交换的情况if (dfs(s1, s2, i1, i2 + length - i, i) && dfs(s1, s2, i1 + i, i2, length - i)) {memo[i1][i2][length] = 1;return true;}}memo[i1][i2][length] = -1;return false;
}bool isScramble(char* s1, char* s2) {memset(memo, 0, sizeof(memo));return dfs(s1, s2, 0, 0, strlen(s1));
}

http://www.ppmy.cn/server/41168.html

相关文章

深入浅出:ConcurrentLinkedQueue源码分析与实战

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

postgis导出shp中文乱码

使用postgis导出shp数据&#xff0c;发现中文内容乱码 网上搜到的解决方案&#xff0c;都是添加环境变量PGCLIENTENCODINGGBK 但是添加之后&#xff0c;不仅没有解决我的问题&#xff0c;反而导出直接报错了 经过个人简单分析之后&#xff0c;发现这个应该跟导入的数据编码格…

windows驱动开发-INF文件(二)

下面是INF文件中会出现的节的说明&#xff0c;我尽可能涵盖所有的部分。 inf-version [Version]Signature"signature-name" [Classclass-name] [ClassGuid{nnnnnnnn-nnnn-nnnn-nnnn-nnnnnnnnnnnn}] [Provider%INF-creator%] [ExtensionId{xxxxxxxx-xxxx-xxxx-xxxx-…

Stable Diffusion WebUI 绘画

配置环境介绍​ 目前平台集成了 Stable Diffusion WebUI 的官方镜像&#xff0c;该镜像中整合如下资源&#xff1a; GpuMall智算云 | 省钱、好用、弹性。租GPU就上GpuMall,面向AI开发者的GPU云平台 Stable Diffusion WebUI版本&#xff1a;v1.7.0 Python版本&#xff1a;3.1…

16进制与不同进制之间计算加减乘除的比较快的方法

方法&#xff1a; 1.加分、减法&#xff1a; 将所有的进制的数转成目标进制的数&#xff0c;然后按位加。 如 0x123 0x1234 0x1357 2.乘法、除法&#xff1a; 将所有的进制的数转成二进制数&#xff0c;然后进行移位。 如 0x123456 乘 32&#xff08;十进制&#xff09;…

速盾:局域网cdn加速

随着互联网的发展&#xff0c;网站的访问量越来越大&#xff0c;特别是一些大型的网站&#xff0c;每天都会有大量的用户访问。这样的情况下&#xff0c;网站的访问速度就成为了一个非常重要的问题。如果访问速度过慢&#xff0c;用户就会感到烦躁&#xff0c;甚至可能会选择放…

Qt | QDateTimeEdit、QDateEdit类和QTimeEdit类

01、上节回顾 Qt | 旋转框(微调按钮)QAbstractSpinBox基类Qt | QSpinBox 类 & QDoubleSpinBox 类(微调框)

简单的Python示例母亲节的祝福

在Python中&#xff0c;我们通常不会直接编写HTML源码&#xff0c;但我们可以编写一个Python脚本来生成或发送包含母亲节祝福的HTML内容。以下是一个简单的Python示例&#xff0c;它使用字符串拼接来创建一个简单的HTML页面&#xff0c;其中包含母亲节的祝福。 # 定义一个包含…

基于springboot+mybatis+vue的项目实战之页面参数传递

如图所示&#xff0c;删除操作可以用按钮实现&#xff0c;也可以用超链接来实现。 1、第一种情况&#xff0c;用按钮实现。 html页面相关&#xff1a; <button type"button" click"deleteId(peot.id)">删除</button> <script>new Vue(…

Spring Bean的生命周期 五步 七步 十步 循序渐进

&#x1f468;‍&#x1f3eb; 参考视频地址 &#x1f496; 五步版 实例化 bean&#xff08;构造方法&#xff09;属性注入&#xff08;set() 方法&#xff09;初始化方法&#xff08;自定义&#xff09;使用bean销毁方法&#xff08;自定义&#xff09; &#x1f496; 七步版…

python下载及安装

1、python下载地址&#xff1a; Python Releases for Windows | Python.orgThe official home of the Python Programming Languagehttps://www.python.org/downloads/windows/ 2、python安装 &#xff08;1&#xff09; 直接点击下载后的可执行文件.exe &#xff08;2&…

iOS 数据库升级

使用FMDB结合FMDBMigrationManager&#xff08;一个三方库&#xff09;的方式 1、首先自定义一个sql语句的类 #import#import"FMDBMigrationManager.h" interfaceMigration:NSObject (instancetype)initWithName:(NSString*)name andVersion:(uint64_t)version a…

十一、Redis持久化-RDB、AOF

Redis提供了两种持久化数据的方式。一种是RDB快照&#xff0c;另一种是AOF日志。RDB快照是一次全量备份&#xff0c;AOF日志是连续的增量备份。RDB快照是以二进制的方式存放Redis中的数据&#xff0c;在存储上比较紧凑&#xff1b;AOF日志记录的是对内存数据修改的指令文本记录…

MFC重要的初始化函数InitInstance

MFC应用程序最早处理的类的初始化函数通常是CWinApp类的构造函数。CWinApp类是MFC应用程序的主类&#xff0c;负责整个应用程序的初始化和管理。 在MFC应用程序中&#xff0c;通常会创建一个派生自CWinApp类的应用程序类&#xff0c;例如CMyApp。在应用程序启动时&#xff0c;…

第十二届蓝桥杯省赛真题 Java A 组【原卷】

文章目录 发现宝藏【考生须知】试题 A: 相乘试题 B: 直线试题 C : \mathrm{C}: C: 货物摆放试题 D: 路径试题 E: 回路计数试题 F : \mathrm{F}: F: 最少砝码试题 G: 左孩子右兄弟试题 H : \mathrm{H}: H: 异或数列试题 I \mathbf{I} I 双向排序试题 J : \mathrm{J}: J: 分…

【Web后端】实现文件上传

表单必须使用post提交 ,enctype 必须是multipart/form-data在Servlet上填加注解 MultipartConfiglocation &#xff1a;默认情况下将存储文件的目录&#xff0c;默认值为“”。maxFileSize &#xff1a;允许上传文件的最大大小&#xff0c;其值以字节为单位。 默认值为-1L表示无…

maven打包SpringBoot项目报错Perhaps you are running on a JRE rather than a JDK?

maven打包SpringBoot项目报错信息如下 [ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?提示很明显&#xff0c;他需要JDK&#xff0c;你只有JRE 解决方法 通过yum搜索jdk可以看到以下两个应用 $ yum search j…

每天一个数据分析题(三百二十三)

在Excel中想要画出水滴图&#xff0c;可以使用哪种图表&#xff1f; A. 饼图 B. 簇状柱形图 C. 折线图 D. 树状图 数据分析认证考试介绍&#xff1a;点击进入 题目来源于CDA模拟题库 点击此处获取答案

带头双向循环链表List

文章目录 链表面试题实现代码顺序表和链表的优劣&#xff08;区别联系&#xff09; 链表的种类有八种&#xff1a; 单链表/双链表有头/无头循环/非循环 最常用的一个是最简单的——无头单向不循环链表——单链表 一个是最复杂的——有头双向循环链表——双链表 无头单向非循…

vue+lodop实现web端打印标签功能

背景&#xff1a;项目要求在web端连接标签打印机&#xff0c;打印收件人信息 lodop打印插件地址&#xff1a;Lodop和C-Lodop官网主站 在项目中使用 1、去官网下载lodop包下载中心 - Lodop和C-Lodop官网主站 windows系统直接下载windows32版的就可以 2、解压安装 点击CLodop…