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

C语言 | Leetcode C语言题解之第30题串联所有单词的子串

题目:

题解:

typedef struct {char key[32];int val;UT_hash_handle hh;
} HashItem;int* findSubstring(char * s, char ** words, int wordsSize, int* returnSize){    int m = wordsSize, n = strlen(words[0]), ls = strlen(s);int *res = (int *)malloc(sizeof(int) * ls);int pos = 0;for (int i = 0; i < n; i++) {if (i + m * n > ls) {break;}HashItem *diff = NULL;char word[32] = {0};for (int j = 0; j < m; j++) {snprintf(word, n + 1, "%s", s + i + j * n);HashItem * pEntry = NULL;HASH_FIND_STR(diff, word, pEntry);if (NULL == pEntry) {pEntry = (HashItem *)malloc(sizeof(HashItem));strcpy(pEntry->key, word);pEntry->val = 0;HASH_ADD_STR(diff, key, pEntry);} pEntry->val++;            }for (int j = 0; j < m; j++) {HashItem * pEntry = NULL;HASH_FIND_STR(diff, words[j], pEntry);if (NULL == pEntry) {pEntry = (HashItem *)malloc(sizeof(HashItem));strcpy(pEntry->key, words[j]);pEntry->val = 0;HASH_ADD_STR(diff, key, pEntry);} pEntry->val--;if (pEntry->val == 0) {HASH_DEL(diff, pEntry);free(pEntry);}}for (int start = i; start < ls - m * n + 1; start += n) {if (start != i) {char word[32];snprintf(word, n + 1, "%s", s + start + (m - 1) * n);HashItem * pEntry = NULL;HASH_FIND_STR(diff, word, pEntry);if (NULL == pEntry) {pEntry = (HashItem *)malloc(sizeof(HashItem));strcpy(pEntry->key, word);pEntry->val = 0;HASH_ADD_STR(diff, key, pEntry);} pEntry->val++;if (pEntry->val == 0) {HASH_DEL(diff, pEntry);free(pEntry);}snprintf(word, n + 1, "%s", s + start - n);pEntry = NULL;HASH_FIND_STR(diff, word, pEntry);if (NULL == pEntry) {pEntry = (HashItem *)malloc(sizeof(HashItem));strcpy(pEntry->key, word);pEntry->val = 0;HASH_ADD_STR(diff, key, pEntry);} pEntry->val--;if (pEntry->val == 0) {HASH_DEL(diff, pEntry);free(pEntry);}}if (HASH_COUNT(diff) == 0) {res[pos++] = start;}}HashItem *curr, *tmp;HASH_ITER(hh, diff, curr, tmp) {HASH_DEL(diff, curr);  free(curr);      }}*returnSize = pos;return res;
}
http://www.lryc.cn/news/339665.html

相关文章:

  • 大数据dolphinscheduler 本地容器化安装
  • 简单的车牌号识别
  • openGauss学习笔记-261 openGauss性能调优-使用Plan Hint进行调优-将部分Error降级为Warning的Hint
  • CSS水波纹效果
  • 迭代器模式:优雅地遍历数据集合
  • c++总结笔记(一)
  • [python][gradio]chatbot控件用法
  • Sublime Text下载,安装,安装插件管理器,下载汉化插件
  • c++ ,stl经常出现的<>尖括号其实就是模板类的实例化
  • goproxy 简单介绍 及一键安装脚本
  • Day13-Python基础学习之数据分析案例
  • 研究生,该学单片机还是plc。?
  • 【Java】导出Mysql表表结构与注释数据字典
  • 第07-2章 TCP/IP模型
  • 【办公类-21-15】 20240410三级育婴师 712道单选题(题目与答案合并word)
  • Vue3+Vant开发:登录功能
  • Linux程序调试优化(1)——内存占用详解及优化思路
  • 高效解决Visual Studio Code中文乱码问题
  • springboot接口提高查询速度方法
  • 如何在苹果手机上安装iOS应用的.ipa文件?
  • IDEA pom.xml显示灰色并被划线
  • 玄子Share-使用 Pycharm 执行 Shell 脚本
  • 如何让Nrf connect、EFR connect直接显示特征值数据及其单位
  • python笔记
  • Java编译期注解处理器AbstractProcessor使用
  • JetBrains相关的IDE有哪些?
  • Git-常规用法-含解决分支版本冲突解决方法
  • 基于springboot实现大型商场应急预案管理系统项目【项目源码+论文说明】
  • 系统学c#:1、基础准备(软件下载与安装)
  • 解决CSS中鼠标移入到某个元素其子元素被遮挡的问题